jz2440linux内核移植笔记

一、开发环境

1、Linux内核:Linux2.6.22.6

2、JZ2440

3、ubuntu9.10

二、移植过程

1、修改顶层Makefile,目录/linux-2.6.22.6

185 #ARCH        ?= arm
186 #CROSS_COMPILE    ?=arm-linux-

2、使用arch/arm/configs/s3c2410_defconfig 配置内核,

  /work/system/linux-2.6.22.6$ make s3c2410_defconfig

3、使用make menuconfig进入图形配置界面

jz2440linux内核移植笔记_第1张图片

system type-->,选arm

jz2440linux内核移植笔记_第2张图片

选samsung s3c2440

jz2440linux内核移植笔记_第3张图片

保存,退出。

4、输入make uImage,将在arch/arm/boot目录生成内核文件uImage

5、用头tftp命令,下载到sdram,注意先ping一下看是否能正常通信,不再赘述。下载命令如下:

OpenJTAG> tftp 0x32000000 uImage

6、下载后,先在sdram中执行,输入命令 bootm 0x32000000,注意地址要和上面相同,执行后显示乱码

 jz2440linux内核移植笔记_第4张图片

7、修改时钟

S3C2440支持2种晶振频率:12MHZ和16MHZ。qq2440v3开发板使用的是12M的晶振,而内核源代码则采用的是16M频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的波特率(正确的应是115200),这样在超级终端中看到的就是乱码。因此我们只需修改内核源代码中的晶振频率即可。

将arch/arm/mach-s3c2440/mach-smdk2440.c的第180行

s3c24xx_init_clocks(16934400);

改为:

s3c24xx_init_clocks(12000000);

下载OpenJTAG> tftp 0x32000000 uImage,执行bootm 0x32000000,可以内核正常启动信息如下图,最后出现panic。这是因为内核从u-boot获得的启动参数(root=/dev/mtdblock2)表明,根文件系统放在nand flash的第3个分区上,而我们也没有做文件系统。jz2440将nandflash划分为三个分区,前2M用于放内核,接下里8M用于存放jffs2文件系统,剩下的用来放yaffs文件系统。接下里要做的就是要修改MTD分区,yaffs文件系统移植。

jz2440linux内核移植笔记_第5张图片

三、修改mtd分区过程

1、修改arch/arm/plat-s3c24xx/common-smdk.c文件,109-150行。默认情况内核在nand flash上创建了8个分区,根据韦东山jz2440教程,将nandflash划分为三个分区,前2M用于放内核,接下里8M用于存放jffs2文件系统,剩下的用来放yaffs文件系统。修改后如下:

jz2440linux内核移植笔记_第6张图片

2、输入命令make uImage,生成改写的uImage

3、下载,命令tftp 0x32000000 uImage;启动,命令bootm 0x32000000。输出如下:


可见已有三个分区。







你可能感兴趣的:(嵌入式linux内核移植)