Linux学习内核移植相关笔记第2部分

本文转自:http://www.arm32.com/post/11017.html

上接:[Linux学习内核移植相关笔记第1部分
注意1):本小节假定您已经按照前面的方法安装了 USB 驱动, 并把开发板设置为 NOR

Flash 启 动 ,系 统 更新和安装完 毕 请 设 置为 Nand Flash 启 动。

注意1)配置好上面的基本配置后的内核并编译产生 zImage 后,并且烧到板上(烧到哪里?根据友善的资料知道,把友善开发板拨到 NorFlash  方式启动,然后根据 supervivi 在串口上的提示,可以烧写到SDRAM ( 我的开发板是64M SDRAM,64M NandFlash,2M  NorFlash友善P12)中,然后启动系统看效果,也可以烧写到 NandFlash 中,然后启动系统看效果)

(可以正常引导(运行)后,下一步需要做什么?

需要在 linux 中添加NandFlash 的驱动(即需要对编译好 linux 内核完善下,再编译产生 zImage,

具体如何完善,参考“天嵌Linux手册”pdf 文档的 P30-P34,其实过程也是很简单,就是完善下 linux 内核对各种容量的 NandFlash  的驱动支持,然后用#make menuconfig 进入配置单,把已经完善的 NandFlash 配置选型添加到该配置单即可)。

再次编译的 zImage,重新烧写到开发板中并启动,在启动信息里面将会比上次编译的zImage 多了写 NandFlash  的信息。下面就是如何完善内核的NandFlash驱动)。

第6步:完善内核的NandFlash驱动(这一部分在天嵌linux手册P30有更详细描述)
进行  Nand Flash 的移植,其实在 linux 里面已经做好了 Nand Flash  的驱动,我们只需要进行修改就可以使用了。
修改内核源码“arch/arm/plat-s3c24xx/common-smdk.c”文件,在 109  行左右,有一个结构体名为:

smdk_default_nand_part[], 要跟bootloader的一致。在我的板子中修改如下所示:

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = "QinziqiangBoot",

.size = 0x000000030000,

.offset = 0,

},

[1] = {

.name = "QinziqiangKernel",

.offset = 0x000000050000,

.size = 0x000000200000,

},

[2] = {

.name = "QinziqiangRoot",

.offset = 0x000000250000,

.size = 0x000003DAC000,

},

};

然后修改 Nand Flash 的读写匹配时间,修改 common-smdk.c 文件的刚刚修改后的大概 140 行左右的smdk_nand_info  结构体,修改内容如下:  (红色部分所示,这个步骤可以不用做)
static struct  s3c2410_platform_nand smdk_nand_info = {

.tacls = 10,

.twrph0 = 25,

.twrph1 = 10,

.nr_sets = ARRAY_SIZE(smdk_nand_sets),

.sets = smdk_nand_sets,

};

附:参考 天嵌Linux手册文档的 P31-P32 大

致了解到,

uboot,kernel,yaffs2 通常占用多少 Flash

64M 的 NandFlash 分区情况

boot: 0x00000000 ---0x00020000 大小共:0x00020000 256K

Kernel: 0x00200000 ---0x00040000 大小共:0x00400000 2M

Yaffs2: 0x00400000 --- 0x03FF8000 大小共:0x03BF8000 60M

128M 的 NandFlash 分区情况

boot: 0x00000000 ---0x00020000 大小共:0x00020000 256K

Kernel: 0x00200000 ---0x00040000 大小共:0x00400000 2M

Yaffs2: 0x00400000 ---0x07FA0000 大小共:0x07BA0000 123.7M

256M—1G 的 NandFlash 分区情况

boot: 0x00000000 ---0x00020000 大小共:0x00020000 256K

Kernel: 0x00200000 ---0x00040000 大小共:0x00400000 2M

Yaffs2: 0x00400000 ---0x0FF80000 大小共:0x0FB80000 251.5M

剩余的部分供用户使用。

第7步:完善内核:添加对应的NandFlash驱动配置

然后需要在刚刚完成的配置单中添加上对 Nand Flash 支持的配置选项,输入:
#make  menuconfig,进入配置单选项,然后配置如下所示:

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

[*] MTD partitioning support

<> RedBoot partition table parsing

[] Command line partition table parsing

<*> Direct char device access to MTD devices

-*- Common interface to block layer for MTD 'translation layers

<*> Caching block device access to MTD devices

<*> NAND Device Support --->

<*> NAND Flash support for S3C2410/S3C2440 SoC

[*] S3C2410 NAND Hardware ECC

Nand Flash Capacity select (256MB~1GB Nand for EmbedSky Board) --->

说明 1:上面绿色部分的选项只有一种情况下才能选择:Linux-2.6.30.4 内核+256MB 以及更大容量的Nand Flash 时才能选择;  对于其他版本的 Linux 内核不管是不是 256MB 的 Nand Flash 都不需要选择该选项  (我是没选)

说明 2:上面红色部分是我们需要选择的 Nand Flash 的容量,请更加实际情况进行选择,下面列出了。
它的配置选项,带 X 的就是被选中的:

( ) 64MB Nand for EmbedSky Board

( ) 128MB Nand for EmbedSky Board

(X) 256MB~1GB Nand for EmbedSky Board

这里列出各个 Nand Flash 容量判别方式:

K9F1208U0C 是 64MB 的 Nand Flash;

K9F1G08U0A 是 128MB 的 Nand Flash;

K9FXG08U0A 是 256MB 1GB 的 Nand Flash(其中 X=2、4、8)

配置完毕这些之后,保存配置单。

请根据您所使用的开发板的情况进行配置。
第8步:在次编译内核
# make  clean
再次
#make  zImage
并查看驱动的使用情况

然后再编译出镜像,然后烧写到开发板,,你可以在打印信息中看到刚刚做好的 Nand Flash

的分区信息。

下面是我开发板运行后的部分结果(从中可以看到“QinziqiangBoot”, "QinziqiangKernel"

, "QinziqiangRoot"):
........
Bad eraseblock 3773 at 0x000003af4000

Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":

0x000000000000-0x000000030000 : "QinziqiangBoot"

0x000000050000-0x000000250000 : "QinziqiangKernel"

0x000000250000-0x000003ffc000 : "QinziqiangRoot"

yaffs: Attempting MTD mount on 31.2, "mtdblock2"

yaffs: block 3625 is marked bad

block 3626 is bad

yaffs_read_super: isCheckpointed 0

VFS: Mounted root (yaffs filesystem) on device 31:2.

Freeing init memory: 120K

......

下接:[Linux学习内核移植相关笔记第3部分

 

你可能感兴趣的:(Linux内核移植)