U-BOOTはフレンドリーアームmini 2440に移植
U-BOOTはフレンドリーアームmini 2440に移植
開発環境:ubuntu 10.10
コンパイラ:フレンドリーなアームmini 2440ディスクにarm-linux-gcc 4.4を持参する.3
一.denx公式サイトでソースコードをダウンロードします.私が使っているバージョンはu-boot-2010.03です.二.ホストコンパイル環境はフレンドリーなアームに提供するarm-linux-gccである.参照プレートはsmdk 2410です.三.第1段階の移行プロセスの開始
1.まずコンパイル環境をテストします.arm-linux-gccは、すでにPATH環境変数を加えているので、lib_armディレクトリの下のconfig.mkはCRPSS_を定義したCOMPILEはarm-linux-で、ホームディレクトリの下のMakefileにはこのファイルが含まれているので、クロスコンパイルツールはすでに確定しています.これ以上直す必要はない.
2.mini 2440構成およびファイルの作成
(1)最上位ディレクトリMakefileに入り、次のものを見つけます.
このコマンドは実際には最上位ディレクトリの下のmkconfigを実行し、後ろはパラメータです.
(2)/board/samsungに入り、smdk 2410ディレクトリをmini 2440にコピーします.これは私たちの開発ボードのディレクトリです.mini 2440ディレクトリに入り、smdk 2410.cをmini 2440.cに変更します.Makefileを変更します:
(3)/include/configsに入り、smdk 2410.hをmini 2440.hにコピーします.これは私たちのプロファイルです.
これで私たちの開発ボードのファイルはすべてありますが、内容はsmdk 2410開発ボードです.
コンパイルテスト
3. start.Sの修正(1)
4.クロックを初期化すると、すぐにcpu内部が初期化されます.この関数cpu_init_critは変更する必要はありませんが、中で呼び出されたlowlevel_Init関数は、メモリを初期化するコードなので、開発ボードごとにメモリが異なるのでlowlevel_を変更する必要があります.init.Sは/board/samsung/mini 2440ディレクトリにあります.
5.検査コードの位置及び起動方式を判断するコードを追加する
現在のコード位置とTEXT_を比較することにより、起動コードの位置を確認します.BASE同士が同一か否かで判断する起動方式はBWSCON[2:1]をチェックすることで判断され、具体的な実現はstart.Sの分析
6.Nandflash起動コードの追加
nand_read_llこの関数はnand_read.cの中の、このファイルはボードレベルのディレクトリに、このファイルを/board/samsung/mini 2440に追加する必要があります.そしてMakefileを修正してコードをコンパイルする
この第1段階のコード修正が完了しました.コンパイルに合格するかどうかをテストするため、コードにCONFIG_があります.S 3 C 2440の構成は、mini 2440を変更する.h.
7コンパイルエラー:
(1).DWの検出STACK_STARTは定義されていませんが、これはC言語の初期話スタックに入るときに使われるもので、定義が付いています.
(3)s 3 c 2440が発見された.h CONFIGが定義されていませんS 3 C 440、CONFIG_についてS 3 C 2410の前処理オプションはすべてCONFIG_に変更された.S3C2410||CONFIG_S 3 C 2440、これによりコードがコンパイルされる.
8 ledランプ表示プログラムを追加します.
9 u-bootを変更します.ldsのリンク順はlowlevel_init.S,nand_read.cはいずれも前の4 Kコードで、
四.第2段階移植プロセスの開始
1.シリアルポート初期化の変更
シリアルポート実装は基本的に何も変更する必要はありません.シリアルポート初期化関数はserialです.init、/drivers/serial/serial_s3c24x0.cでは、シリアルポートがボートレートを初期化するためget_が必要PCLK()という関数ですが、この関数は/cpu/arm 920 t/speedです.cでは2410と2440の実装が異なるので,この関数を修正する必要がある.修正が完了し、再コンパイルエラーが発生しました.CAMDIVNは定義していません.2410にはこのレジスタがありません.s 3 c 24 x 0です.hに定義を入れればいいです.その後、ボードにダウンロードすると、シリアルポートに正常な端末表示が表示されます.しかし、多くの命令は使えない.他のドライバなので移植はありません.
2.LCD端末移植
リファレンスコードのLCD駆動はVFD方式で実現されていますが、コードを分析するとプログラミング方式が不快な感じがします.LCD実現方式を見てみると、もっと自分のスタイルに近いです.だから思い切ってLCD方式に転向してLCD端末を実現する.
(1)まずmini 2440.hにマクロ定義を追加する
2410と2440のレジスタは同じなので、CONFIGを増やすだけです.S 3 C 2440でいいです.
(3)下地LCD駆動コードlcd.cを追加する
lcd.c/board/samsung/mini 2440にコピーし、下位駆動であることを示します.このファイルは参照コードに基づいて修正されたものです.
具体的な実装はu-boot lcd分析(4)を参照して色ビット数を定義する
なぜならcのデフォルトの色は8ビットで、統宝は16ビットです.だからmini 440.hで定義
mini 2440でhで定義#define CONFIG_SYS_WHITE_ON_BLACK 1
反白します.これでかっこいいですね.デフォルトはLCD端末プロンプトであるため、これは登録装置の順序のため、/common/stdio.c stdio_init関数でdrv_lcd_Init()をserial_に配置stdio_Init()の後ろでいいです.そしてダウンロードを再コンパイルします.デフォルトのシリアルポート端末になり、setenv stdout lcdを入力することで切り替えることができます.
(6)logoを追加する.
mini 2440でh,CONFIG_の定義LCD_LOGO.再コンパイルするとdenxの起動ロゴが表示されますが、まだカッコ悪いと感じたら、自分のロゴを追加します.メソッドの変更、/tools/Makefile
3.Nandflashドライブマイグレーション
(1)最下位ドライバコードの修正
変更/drivers/mtd/nand/s 3 c 2410_nand.c
(2)構成の追加
mini 2440でhにNandflashの構成を追加
4.ネットワーク駆動の移植
(1)NIC初期化コードの修正
mini 2440でcに追加
(2)構成の追加
mini 244でhに追加
(3)dm 9000 x.cの修正
364行
(4)nfsコードの修正
33行
5デフォルト環境変数の変更
これはストレージメディア、デフォルトのFlash、ここでNandFlashです.
五.まとめ
今回の移植はtekkamaninjaのフレンドリーな腕mini 2440への移植コードを参照します.多くの場所でコードがそのまま運ばれています.時間がないため、いくつかのコードの実現についてまだよく分かりません.しかしu-bootの基本的なソフトウェアアーキテクチャについては一定の理解がある.独自の点は、起動方式やlcd駆動の移植を判断することです.前者はヌードマシンプログラムの起動コードを参考に書いたもので、後者は完全に自分のコードに対する理解に従って移植されたものです.やはり成功した.u-bootソフトウェアの階層構造が印象的でした.そしてMakefileの構造も私に啓発されました.この最初の接触のオープンソースプロジェクト.これからもよく使います.
移植のソースコードは私のcsdnダウンロード資源の中でダウンロードしますhttp://download.csdn.net/detail/YAOZHENGUO2006/3585685
開発環境:ubuntu 10.10
コンパイラ:フレンドリーなアームmini 2440ディスクにarm-linux-gcc 4.4を持参する.3
一.denx公式サイトでソースコードをダウンロードします.私が使っているバージョンはu-boot-2010.03です.二.ホストコンパイル環境はフレンドリーなアームに提供するarm-linux-gccである.参照プレートはsmdk 2410です.三.第1段階の移行プロセスの開始
1.まずコンパイル環境をテストします.arm-linux-gccは、すでにPATH環境変数を加えているので、lib_armディレクトリの下のconfig.mkはCRPSS_を定義したCOMPILEはarm-linux-で、ホームディレクトリの下のMakefileにはこのファイルが含まれているので、クロスコンパイルツールはすでに確定しています.これ以上直す必要はない.
$cd u-boot-mini2440
$make smdk2410_config
$make
コンパイルに合格しました.コンパイル環境に問題がないことを示します.2.mini 2440構成およびファイルの作成
(1)最上位ディレクトリMakefileに入り、次のものを見つけます.
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
コピーして、次のように変更します.mini2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0
注意:@の前にtabキーがあります.そうしないと、構成をコンパイル中にエラーが発生します.このコマンドは実際には最上位ディレクトリの下のmkconfigを実行し、後ろはパラメータです.
(2)/board/samsungに入り、smdk 2410ディレクトリをmini 2440にコピーします.これは私たちの開発ボードのディレクトリです.mini 2440ディレクトリに入り、smdk 2410.cをmini 2440.cに変更します.Makefileを変更します:
COBJS := mini2440.o flash.o
(3)/include/configsに入り、smdk 2410.hをmini 2440.hにコピーします.これは私たちのプロファイルです.
これで私たちの開発ボードのファイルはすべてありますが、内容はsmdk 2410開発ボードです.
コンパイルテスト
make clean
make mini2440_config
make
コンパイルは、説明によって問題ありません.3. start.Sの修正(1)
@ bl coloured_LED_init
@ bl red_LED_on
このmini 2440はカラーランプがないので、コメントしてください.# if defined(CONFIG_S3C2440)
ldr r1, =0x3fff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
サブ割り込み2440は15個あるので変更します.# if defined(CONFIG_S3C2440)
#define MPLLCON 0x4c000004
#define UPLLCON 0x4c000008
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 405 MHz ! */
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]
ldr r0, =MPLLCON
ldr r1, =(0x7f<<12)|(0x02<<4)|(0x01)
str r1, [r0]
ldr r0, =UPLLCON
ldr r1, =(0x38<<12)|(0x02<<4)|(0x02)
str r1, [r0]
# else
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif /* CONFIG_S3C2440 */
以上がS 3 C 24440クロック初期化のコードであり、2410と2440クロック初期化の差が大きいことがわかる.4.クロックを初期化すると、すぐにcpu内部が初期化されます.この関数cpu_init_critは変更する必要はありませんが、中で呼び出されたlowlevel_Init関数は、メモリを初期化するコードなので、開発ボードごとにメモリが異なるのでlowlevel_を変更する必要があります.init.Sは/board/samsung/mini 2440ディレクトリにあります.
#define Trp 0x2 /* 2clk */
#define REFCNT 1012
5.検査コードの位置及び起動方式を判断するコードを追加する
/*********** CHECK_CODE_POSITION ************/
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
/***************** CHECK_CODE_POSITION ****/
/***************** CHECK_BOOT_FLASH *******/
#define rBWSCON 0x48000000
mov r0, #rBWSCON
ldr r0, [r0]
bic r0, r0, #0xfffffff5 /* BWSCON[2:1] is controled by OM[1:0] */
cmp r0, #0 /* when OM[1:0] is 00,BSWCON[2:1]=00, nand flash boot */
bne relocate /* norflash boot */
/*****************CHECK_BOOT_FLASH*************************/
現在のコード位置とTEXT_を比較することにより、起動コードの位置を確認します.BASE同士が同一か否かで判断する起動方式はBWSCON[2:1]をチェックすることで判断され、具体的な実現はstart.Sの分析
6.Nandflash起動コードの追加
#define LENGTH_UBOOT 0x60000
#define NAND_CTL_BASE 0x4E000000
#ifdef CONFIG_S3C2440
/* Offset */
#define oNFCONF 0x00
#define oNFCONT 0x04
#define oNFCMD 0x08
#define oNFSTAT 0x20
@ reset NAND
mov r1, #NAND_CTL_BASE
ldr r2, =( (7<<12)|(7<<8)|(7<<4)|(0<<0) )
str r2, [r1, #oNFCONF]
ldr r2, [r1, #oNFCONF]
ldr r2, =( (1<<4)|(0<<1)|(1<<0) ) @ Active low CE Control
str r2, [r1, #oNFCONT]
ldr r2, [r1, #oNFCONT]
ldr r2, =(0x6) @ RnB Clear
str r2, [r1, #oNFSTAT]
ldr r2, [r1, #oNFSTAT]
mov r2, #0xff @ RESET command
strb r2, [r1, #oNFCMD]
mov r3, #0 @ wait
nand1:
add r3, r3, #0x1
cmp r3, #0xa
blt nand1
nand2:
ldr r2, [r1, #oNFSTAT] @ wait ready
tst r2, #0x4
beq nand2
ldr r2, [r1, #oNFCONT]
orr r2, r2, #0x2 @ Flash Memory Chip Disable
str r2, [r1, #oNFCONT]
@ get read to call C functions (for nand_read())
ldr sp, DW_STACK_START @ setup stack pointer
mov fp, #0 @ no previous frame, so fp=0
@ copy U-Boot to RAM
ldr r0, =TEXT_BASE
mov r1, #0x0
mov r2, #LENGTH_UBOOT
bl nand_read_ll
tst r0, #0x0
beq ok_nand_read
bad_nand_read:
loop2:
b loop2 @ infinite loop
ok_nand_read:
@ verify
mov r0, #0
ldr r1, =TEXT_BASE
mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes
go_next:
ldr r3, [r0], #4
ldr r4, [r1], #4
teq r3, r4
bne notmatch
subs r2, r2, #4
beq stack_setup
bne go_next
notmatch:
loop3:
b loop3 @ infinite loop
#endif
nand_read_llこの関数はnand_read.cの中の、このファイルはボードレベルのディレクトリに、このファイルを/board/samsung/mini 2440に追加する必要があります.そしてMakefileを修正してコードをコンパイルする
COBJS := mini2440.o flash.o nand_read.o
この第1段階のコード修正が完了しました.コンパイルに合格するかどうかをテストするため、コードにCONFIG_があります.S 3 C 2440の構成は、mini 2440を変更する.h.
7コンパイルエラー:
(1).DWの検出STACK_STARTは定義されていませんが、これはC言語の初期話スタックに入るときに使われるもので、定義が付いています.
#define STACK_BASE 0x33f00000
#define STACK_SIZE 0x10000
.align 2
DW_STACK_START: .word STACK_BASE+STACK_SIZE-4
(2)include/asm/arch/s 3 c 24 x 0_発見cpu.hエラー、CONFIGが定義されていますS 3 C 2410はs 3 c 2410を含む.h、CONFIGを定義しているからです.S 3 C 440はヘッダファイルを含むので、s 3 c 2410を変更する.hはs 3 c 2440にコピーする.h. (3)s 3 c 2440が発見された.h CONFIGが定義されていませんS 3 C 440、CONFIG_についてS 3 C 2410の前処理オプションはすべてCONFIG_に変更された.S3C2410||CONFIG_S 3 C 2440、これによりコードがコンパイルされる.
8 ledランプ表示プログラムを追加します.
# if defined(CONFIG_MINI2440_LED)
#define rGPBCON 0x56000010
#define rGPBDATA 0x56000014
#define rGPBUP 0x56000018
ldr r0, =rGPBCON
ldr r1, =(0x01<<10)|(0x01<<12)|(0x01<<14)|(0x01<<16)
str r1, [r0]
ldr r0, =rGPBUP
ldr r1, =0x7fff
str r1, [r0]
ldr r0, =rGPBDATA
ldr r1, =(0x1<<5)|(0x0<<6)|(0x1<<7)|(0x0<<8)
str r1, [r0]
#endif
9 u-bootを変更します.ldsのリンク順はlowlevel_init.S,nand_read.cはいずれも前の4 Kコードで、
cpu/arm920t/start.o (.text)
board/samsung/mini2440/lowlevel_init.o
board/samsung/mini2440/nand_read.o
構成mini 2440.h,CONFIG_を追加するMINI2440_LEDマクロ定義、再コンパイル、ボードにダウンロードし、LEDランプが点灯した場合、1番目と3番目が点灯し、他は消灯します.説明プログラムの第1段階が正しく実行された.kermit(シリアルポート端末)に文字化けしが発生し、シリアルポート駆動がまだ移植されていないことを示し、正常な現象である.四.第2段階移植プロセスの開始
1.シリアルポート初期化の変更
シリアルポート実装は基本的に何も変更する必要はありません.シリアルポート初期化関数はserialです.init、/drivers/serial/serial_s3c24x0.cでは、シリアルポートがボートレートを初期化するためget_が必要PCLK()という関数ですが、この関数は/cpu/arm 920 t/speedです.cでは2410と2440の実装が異なるので,この関数を修正する必要がある.修正が完了し、再コンパイルエラーが発生しました.CAMDIVNは定義していません.2410にはこのレジスタがありません.s 3 c 24 x 0です.hに定義を入れればいいです.その後、ボードにダウンロードすると、シリアルポートに正常な端末表示が表示されます.しかし、多くの命令は使えない.他のドライバなので移植はありません.
2.LCD端末移植
リファレンスコードのLCD駆動はVFD方式で実現されていますが、コードを分析するとプログラミング方式が不快な感じがします.LCD実現方式を見てみると、もっと自分のスタイルに近いです.だから思い切ってLCD方式に転向してLCD端末を実現する.
(1)まずmini 2440.hにマクロ定義を追加する
#define CONFIG_LCD
#define LCD_VIDEO_ADDR 0x33d00000
(2)2440レジスタ追加2410と2440のレジスタは同じなので、CONFIGを増やすだけです.S 3 C 2440でいいです.
(3)下地LCD駆動コードlcd.cを追加する
lcd.c/board/samsung/mini 2440にコピーし、下位駆動であることを示します.このファイルは参照コードに基づいて修正されたものです.
#include <common.h>
#include <netdev.h>
#include <asm/arch/s3c24x0_cpu.h>
#include <video_fb.h>
#include <lcd.h>
#include <asm/io.h>
#if defined(CONFIG_CMD_NAND)
#include <linux/mtd/nand.h>
#endif
DECLARE_GLOBAL_DATA_PTR;
#define MVAL (0)
#define MVAL_USED (0) //0=each frame 1=rate by MVAL
#define INVVDEN (1) //0=normal 1=inverted
#define BSWP (0) //Byte swap control
#define HWSWP (1) //Half word swap control
//TFT 240320
#define LCD_XSIZE_TFT_240320 (240)
#define LCD_YSIZE_TFT_240320 (320)
#define LCD_MEM_SIZE 240*320*16
//TFT240320
#define HOZVAL_TFT_240320 (LCD_XSIZE_TFT_240320-1)
#define LINEVAL_TFT_240320 (LCD_YSIZE_TFT_240320-1)
//Timing parameter for NEC3.5"
#define VBPD_240320 (3)
#define VFPD_240320 (10)
#define VSPW_240320 (1)
#define HBPD_240320 (5)
#define HFPD_240320 (2)
#define HSPW_240320_NEC (36) //Adjust the horizontal displacement of the screen :[email protected]
#define HSPW_240320_TD (23) //64MB nand mini2440 is 36 ,128MB is 23
//+ : --> - : <--
#define CLKVAL_TFT_240320 (3)
//FCLK=101.25MHz,HCLK=50.625MHz,VCLK=6.33MHz
#ifdef CONFIG_LCD
vidinfo_t panel_info = {
LCD_XSIZE_TFT_240320,
LCD_YSIZE_TFT_240320,
LCD_BPP
};
int lcd_line_length;
int lcd_color_fg;
int lcd_color_bg;
void *lcd_base; /* Start of framebuffer memory */
void *lcd_console_address; /* Start of console buffer */
short console_col;
short console_row;
void lcd_ctrl_init (void *lcd_base)
{
struct s3c24x0_lcd * const lcd = s3c24x0_get_base_lcd();
struct s3c2410_nand * const nand = s3c2410_get_base_nand();
/* select LCM type by env variable */
/* Configuration for GTA01 LCM on QT2410 */
lcd->LCDCON1 = 0x00000378; /* CLKVAL=4, BPPMODE=16bpp, TFT, ENVID=0 */
lcd->LCDCON2 = (VBPD_240320<<24)|(LINEVAL_TFT_240320<<14)|(VFPD_240320<<6)|(VSPW_240320);
lcd->LCDCON3 = (HBPD_240320<<19)|(HOZVAL_TFT_240320<<8)|(HFPD_240320);
if ( (nand->NFCONF) & 0x08 ) {
lcd->LCDCON4 = (MVAL<<8)|(HSPW_240320_TD);
}
else {
lcd->LCDCON4 = (MVAL<<8)|(HSPW_240320_NEC);
}
lcd->LCDCON5 = 0x00000f09;
lcd->LPCSEL = 0x00000000;
printf("Video: ");
printf ("TongBao 240*320 LCD 16bit 565 mode
");
/* Init LCD base address */
writel((((ulong)lcd_base) >> 1), &lcd->LCDSADDR1);
writel((((readl(&lcd->LCDSADDR1))&0x1fffff) + (LCD_XSIZE_TFT_240320+0) * LCD_YSIZE_TFT_240320), &lcd->LCDSADDR2);
writel((LCD_XSIZE_TFT_240320 & 0x7ff), &lcd->LCDSADDR3);
/* Clear video memory */
memset((void *)lcd_base, 0, LCD_MEM_SIZE);
/* Enable Display */
writel((readl(&lcd->LCDCON1) | 0x01), & lcd->LCDCON1); /* ENVID = 1 */
}
void lcd_enable (void)
{
}
具体的な実装はu-boot lcd分析(4)を参照して色ビット数を定義する
なぜならcのデフォルトの色は8ビットで、統宝は16ビットです.だからmini 440.hで定義
#define LCD_BPP LCD_COLOR16
(5)再コンパイルmake clean
make mini2440_config
make
は端末プロンプトがLCDに表示されますが、字は白く、背景は黒いです.mini 2440でhで定義#define CONFIG_SYS_WHITE_ON_BLACK 1
反白します.これでかっこいいですね.デフォルトはLCD端末プロンプトであるため、これは登録装置の順序のため、/common/stdio.c stdio_init関数でdrv_lcd_Init()をserial_に配置stdio_Init()の後ろでいいです.そしてダウンロードを再コンパイルします.デフォルトのシリアルポート端末になり、setenv stdout lcdを入力することで切り替えることができます.
(6)logoを追加する.
mini 2440でh,CONFIG_の定義LCD_LOGO.再コンパイルするとdenxの起動ロゴが表示されますが、まだカッコ悪いと感じたら、自分のロゴを追加します.メソッドの変更、/tools/Makefile
ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/ayst.bmp
endif
ayst.bmpは/tools/logosにコピーして、bmp画像に注意するのは要求があって、幅は4の倍数ならば、まだ16ビットです.このようにしてこそ、正しく表示されます.3.Nandflashドライブマイグレーション
(1)最下位ドライバコードの修正
変更/drivers/mtd/nand/s 3 c 2410_nand.c
(2)構成の追加
mini 2440でhにNandflashの構成を追加
#define CONFIG_CMD_NAND 1
/*--------------------------------------------------------------------------------------------
* NAND flash settings
*/
#if defined(CONFIG_CMD_NAND)
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_NAND_BASE 0x4E000000
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define SECTORSIZE 512
#define SECTORSIZE_2K 2048
#define NAND_SECTOR_SIZE SECTORSIZE
#define NAND_SECTOR_SIZE_2K SECTORSIZE_2K
#define NAND_BLOCK_MASK 511
#define NAND_BLOCK_MASK_2K 2047
#define NAND_MAX_CHIPS 1
#define CONFIG_MTD_NAND_VERIFY_WRITE
#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#endif /* CONFIG_CMD_NAND */
(3) 2440 nandflash
/include/asm-arm/arch-s3c24x0/s3c24x0.h
#if defined (CONFIG_S3C2440)
/* NAND FLASH (see S3C2440 manual chapter 6) */
struct s3c2410_nand {
u32 NFCONF;
u32 NFCONT;
u32 NFCMD;
u32 NFADDR;
u32 NFDATA;
u32 NFMECCD0;
u32 NFMECCD1;
u32 NFSECCD;
u32 NFSTAT;
u32 NFESTAT0;
u32 NFESTAT1;
u32 NFMECC0;
u32 NFMECC1;
u32 NFSECC;
u32 NFSBLK;
u32 NFEBLK;
};
#endif
4.ネットワーク駆動の移植
(1)NIC初期化コードの修正
mini 2440でcに追加
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
(2)構成の追加
mini 244でhに追加
#define CONFIG_CMD_PING 1
#define CONFIG_NET_MULTI 1
#define CONFIG_NET_RETRY_COUNT 20
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x20000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT 1
#define CONFIG_DM9000_NO_SROM 1
#undef CONFIG_DM9000_DEBUG
(3)dm 9000 x.cの修正
364行
if (i == 1000) {
printf("could not establish link
");
return 0;
break;
}
(4)nfsコードの修正
33行
#define NFS_TIMEOUT (10*2000UL)
5デフォルト環境変数の変更
/*-----------------------------------------------------------------------------------------------------
*Environment variables setting
*/
#define CONFIG_BOOTDELAY 5
#define CONFIG_BOOTARGS "noinitrd root=/dev/nfs rw nfsroot=192.168.1.111:/home/sun/study/nfsshare/rootfs_qtopia_qt4 ip=192.168.1.230:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M"
#define CONFIG_ETHADDR 08:08:11:18:12:27
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.230
#define CONFIG_SERVERIP 192.168.1.111
#define CONFIG_GATEWAYIP 192.168.1.1
#define CONFIG_OVERWRITE_ETHADDR_ONCE
#define CONFIG_BOOTCOMMAND "tftp 0x30008000 zImage;bootm"
#if defined(CONFIG_CMD_KGDB)
#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
/* what's this ? it's not used anywhere */
#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
#endif
/* timeout values are in ticks */
#define CONFIG_SYS_FLASH_ERASE_TOUT (5*CONFIG_SYS_HZ) /* Timeout for Flash Erase */
#define CONFIG_SYS_FLASH_WRITE_TOUT (5*CONFIG_SYS_HZ) /* Timeout for Flash Write */
#define CONFIG_ENV_IS_IN_NAND 1
#define CONFIG_ENV_OFFSET 0x40000 /* Total Size of Environment Sector */
#define CONFIG_ENV_SIZE 0x20000 /*size of environment */
これはストレージメディア、デフォルトのFlash、ここでNandFlashです.
/*-----------------------------------------------------------------------------------------------------
* linux kernel tags
* This is important for starting kernel
*/
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG
#define CONFIG_SYS_HUSH_PARSER
#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
#define CONFIG_CMDLINE_EDITING
#define CONFIG_AUTO_COMPLETE
このタグリスト構成はカーネルの起動に非常に重要であり、カーネルがなければ起動しない.五.まとめ
今回の移植はtekkamaninjaのフレンドリーな腕mini 2440への移植コードを参照します.多くの場所でコードがそのまま運ばれています.時間がないため、いくつかのコードの実現についてまだよく分かりません.しかしu-bootの基本的なソフトウェアアーキテクチャについては一定の理解がある.独自の点は、起動方式やlcd駆動の移植を判断することです.前者はヌードマシンプログラムの起動コードを参考に書いたもので、後者は完全に自分のコードに対する理解に従って移植されたものです.やはり成功した.u-bootソフトウェアの階層構造が印象的でした.そしてMakefileの構造も私に啓発されました.この最初の接触のオープンソースプロジェクト.これからもよく使います.
移植のソースコードは私のcsdnダウンロード資源の中でダウンロードしますhttp://download.csdn.net/detail/YAOZHENGUO2006/3585685