參考《嵌入式Linux應(yīng)用開發(fā)完全手冊》移植了UBOOT1.1.6和內(nèi)核Linux2.6.22
由于我用的是阿南的AN2410SSB,沒有norflash,,只能把uboot燒進(jìn)nand。剛開始不能saveenv保存環(huán)境變量,,因?yàn)樵及姹臼潜4嬖趎or的,,在打了補(bǔ)丁后問題解決,可以把環(huán)境變量保存在nand上了,,但是修改部分的代碼還有待研究,。
接著配置編譯內(nèi)核,通過tftp下載到sdram執(zhí)行,,打印如下的錯(cuò)誤信息:
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 2. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 2. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 2. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 2. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
并且不斷重復(fù),,我想應(yīng)該是板子沒有把USB設(shè)備引出的緣故,暫時(shí)不管,,應(yīng)該不會(huì)影響到后面文件系統(tǒng)的移植,。
但是還有一個(gè)問題,就是nand的分區(qū)問題,,內(nèi)核把nand分成了三個(gè)區(qū):kernel ,;jffs2;yaffs,,打印信息如下:
NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 3917 at 0x03d34000
Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00200000 : "kernel"
0x00200000-0x00a00000 : "jffs2"
0x00a00000-0x04000000 : "yaffs"
有壞塊,,沒辦法有點(diǎn)郁悶。該內(nèi)核沒有給在nand上給uboot留一個(gè)分區(qū),。因?yàn)樗槍Φ氖怯衝or的班子,,沒辦法,要自己在0地址多加一個(gè)uboot分區(qū)用來保存uboot,。網(wǎng)上有的說bios分區(qū)要和內(nèi)核分區(qū)一致,,有的則說不要緊,至此沒搞清楚,。,。。
目標(biāo):
mtdblock0 0x00000000-----------0x0100000 1M uboot
mtdblock1 0x00100000-----------0x0600000 5M kernel
mtdblock2 0x00600000-----------0x1E00000 24M root
§mtdblock3 0x01E00000----------0x04000000 34M user
具體實(shí)現(xiàn)如下:
首先修改BIOS里面的分區(qū),,在nand.c
static struct Partition NandPart[] =
{
{0, 0x0100000, "uboot"},
{0x00100000, 0x0600000, "kernel"},
{0x00600000, 0x1E00000, "root"},
{0x01E00000, 0x04000000, "user"},
};
再修改linux內(nèi)核中的分區(qū)信息linux-2.6.22在driver/mtd/nand中s3c2410_nand.c中修改分區(qū)信息應(yīng)該與BIOS中的分區(qū)信息相對照.
#define NUM_PARTITIONS 4 //NAND的分區(qū)數(shù)目
#define KERNEL_SIZE SZ_1M*5 //內(nèi)核分區(qū)空間大小
#define ROOT_SIZE SZ_1M*24 //根文件系統(tǒng)分區(qū)大小
#define USER_SIZE SZ_1M*34 //用戶空間分區(qū)大小
§static struct mtd_partition partition_info[] = {
{ .name = "U-boot",
.offset = 0,
.size = UBOOT_SIZE
},
{ .name = "linux 2.6.16 kernel",
.offset = UBOOT_SIZE,
.size = KERNEL_SIZE
},
{ .name = "root",
.offset = UBOOT_SIZE+KERNEL_SIZE,
.size = ROOT_SIZE
},
{ .name = "user",
.offset = UBOOT_SIZE+KERNEL_SIZE+ROOT_SIZE,
.size = USER_SIZE
}
這樣就完成了,。重新編譯下載內(nèi)核,OK