微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux2.6.22内核移植

Linux2.6.22内核移植

时间:11-21 来源:互联网 点击:

2.修改机器码

将编译在arch/arm/boot下面生成的zImage烧写到nand的kernel分区,然后启动。

Copylinux kernel from 0x00060000 to 0x30008000, size = 0x00500000 ... done

zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "console=ttySAC0 root=/dev/nfsnfsroot=192.168.1.101:/home/work/shiyan/rootfsip=192.168.1.102:192.168.1.101:192.168.1.1:255.255.255.0:mini2440:eth0:off"

MACH_TYPE = 362

NOW, Booting Linux......

UncompressingLinux.................................................................................................done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x0000016a).

内核提示不能识别的机器ID,于是修改bootloader的参数使其机器ID为1999,我用的是supervivi使用命令:

set parammach_type 1999

3.修改时钟源频率

启动内核,出现一系列的乱码,这是因为时钟源设置的不对,我的开发板用的是12M的晶振,所以在arch/arm/mach-s3c2440.c的 s3c24xx_init_clocks(16934400);处将16924400修改为12000000。即改为 s3c24xx_init_clocks(12000000);

4.添加nand分区信息

再启动,发现还是不能启动,这是因为内核中填写的nand分区信息不对。于是修改nand分区信息,很多人的做法是直接修改arch/arm /plat-s3c24xx/Common-smdk.c文件里面的smdk_default_nand_part数据结构,这样是不提倡的做法,因为还是那句话,破坏了内核。我们应该再arch/arm/mach-s3c2440/mach-mini2440.c文件中建立我们自己板文件的nand信息。我们在mach-mini2440.c的staticstruct platform_device *smdk2440_devices[]前面添加

static struct mtd_partition smdk_default_nand_part[] = {

//这里面填的是我用的mini2440分区信息//

[0] = {

.name = "patition1 supervivi",

.size = 0x00040000,

.offset = 0,

},

[1] = {

.name = "patition2 param",

.offset =0x00040000,

.size = 0x00020000,

},

[2] = {

.name = "patition3 kernel",

.offset =0x00060000,

.size = 0x00500000,

},

[3] = {

.name = "patition4 root",

.offset = 0x00560000,

.size = 64*1024*1024,

},

[4] = {

.name = "patition5 nand",

.offset = 0,

.size = 64*1024*1024,

},

};

static struct s3c2410_nand_set smdk_nand_sets[] = {

[0] = {

.name = "NAND",

.nr_chips = 1,

.nr_partitions = ARRAY_SIZE(smdk_default_nand_part),

.partitions = smdk_default_nand_part,

},

};

再修改mach-mini2440.c的smdk2440_machine_init函数,将我们的nand传给给nand设备

static void __init smdk2440_machine_init(void)

{

s3c24xx_fb_set_platdata(&smdk2440_lcd_cfg);

//将我们的nand信息传给nand设备//

s3c_device_nand.dev.platform_data= &smdk_nand_info; //set nand infoto nand

platform_add_devices(smdk2440_devices,ARRAY_SIZE(smdk2440_devices));

//smdk_machine_init();

//smdk_machine_init()函数屏蔽,因为他会将arch/arm/plat-s3c24xx/Common-smdk.c里面的分区信息传给nand,这样我们的自己的nand信息就被覆盖了

s3c2410_pm_init();//添加加这个函数是因为smdk_machine_init()里面调用了。

}

再修改mach-mini2440.c的smdk2440_devices

static struct platform_device *smdk2440_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_nand,//向内核添加nand设备

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

};

6.添加YAFFS文件系统支持

完成上述步骤工作后,还是不能正常挂载根文件系统,因为内核还没对yaffs文件系统进行支持。

下载cvs-root-yaffs.tar.gz补丁包文件,解压,运行yaffs2文件夹里面的脚本文件patch-ker.sh来给内核打补丁,用法如下

Usage: ./patch-ker.sh c/l kernelpath

if c/l is c,then copy, if l then link

如果是l则yaffs2源码被链接到内核,如果是c则复制

我们运行./patch-ker.sh c work/kernel_make/linux2.6.22

给内核打上yaffs2补丁,然后使用makemenuconfig配置内核使其支持yaffs2文件系统

File systems --->

Miscellaneous filesystems --->

<*>YAFFS2 file system support

7.配置内核支持EAB

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top