Linux移植之移植步骤

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux移植之移植步骤
在这⾥总结⼀下我在移植Linux2.6.22.6内核过程时的步骤。

移植成功后最终能挂接做好的根⽂件系统,并且启动第⼀个init程序。

移植的步骤如下:
1、将⽹上下载的内核源码⽂件linux-2.6.22.6.tar.bz2放⼊/work/system路径下。

2、切换到/work/system,使⽤tar xjf linux-2.6.22.6.tar.bz2解压缩内核源码⽂件得到⼀个名为linux-2.6.22.6的⽂件夹
3、cd linux-2.6.22.6切换到内核⽂件夹
4、修改顶层Makefile⽂件使得 ARCH ?= arm;CROSS_COMPILE ?= arm-linux-
5、执⾏make s3c2410_defconfig修改内核配置,最终会⽣成⼀个.confg⽂件
6、执⾏make menuconfig配置内核,会读取.confg⽂件然后根据这个⽂件的基础上更改配置,这⾥配置先不⽤更改,直接退出
7、make uImage之后,将产⽣的uImage⽂件通过UBOOT的usb下载功能下载到指定地址,内核分区
8、在uboot界⾯执⾏boot启动内核,可以看到内核启动之后出现⼀⽚乱码
9、更改CPU的时钟晶振,找到 (arch\arm\mach-s3c2440\Mach-smdk2440.c)⽂件,将327⾏的s3c24xx_init_clocks函数⾥的16934400改为12000000,代表12M晶振
324static void __init smdk2440_map_io(void)
325 {
326 s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
327 s3c24xx_init_clocks(12000000);//将16934400改为12000000
328 s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
329 }
10、将更改过的代码继续编译make uImage,重复第7步骤。

11、发现乱码消失了,但是还是不能启动位于nand flash上的第四分区的根⽂件系统
12、更改MTD分区,找到 (arch\arm\plat-s3c24xx\Common-smdk.c)⽂件,将smdk_default_nand_part数组改为如下的形式,这表⽰将nandflash分为四个区:bootloader区、params区、kernel区、root区。

118static struct mtd_partition smdk_default_nand_part[] = {
119 [0] = {
120 .name = "bootloader",
121 .size = 0x00040000,
122 .offset = 0,
123 },
124 [1] = {
125 .name = "params",
126 .offset = 0x00040000,
127 .size = 0x00020000,
128 },
129 [2] = {
130 .name = "kernel",
131 .offset = 0x00060000,
132 .size = 0x00200000,
133 },
134 [3] = {
135 .name = "root",
136 .offset = 0x00260000,
137 .size = 0x0fda0000,
138 }
139 };
13、将更改过的代码继续编译make uImage,重复第7步骤。

14、发现内核还是不能挂接根⽂件系统,出现No filesystem could mount root, tried: ext3 ext2 cramfs msdos vfat romfs字样。

15、增加yaffs2⽂件系统⽀持nandfalsh
a、从⽹上下载的yaffs_source.tar.gz放到/work/system⽬录下
b、tar xzf yaffs_source.tar.gz解压得到Development⽬录下分别有yaffs2和yaffs两个⽂件夹,其中yaffs2是⽐较新的⽂件系统
c、进⼊yaffs2⽂件夹后,./patch-ker.sh c /work/system/linux-2.6.22.6打补丁到内核所在⽬录
上述命令完成以下三件事情
1)、修改内核fs/Kconfig⽂件,增加source "fs/yaffs2/Kconfig",表⽰读⼊fs/yaffs2/Kconfig这个Kconfig⽂件。

2)、修改内核fs/Makefile⽂件,增加obj-$(CONFIG_YAFFS_FS) += yaffs2/,表⽰增加yaffs2/⽬录编译
3)、将yaffs2源码⽬录下的Makefile.kernel⽂件复制为内核fs/yaffs2/Makefile
将yaffs2源码⽬录下的Kconfig⽂件复制到内核fs/yaffs2/⽬录下
将yaffs2源码⽬录下的*.c、*.h⽂件(不包括⼦⽬录下的⽂件)复制到内核fs/yaffs2/⽬录下 d、make menuconfig配置内核⽀持yaffs2⽂件系统
File systems
Miscellaneous filesystems
<*>YAFFS file system support
16、将更改过的代码继续编译make uImage,重复第7步骤。

17、发现内核可以启动位于root分区的根⽂件系统了,移植成功。

相关文档
最新文档