移植内核之--- 3.4.2内核裁剪和打补丁
问 :将uImage 裁剪到小于2M.将uImage 烧录到nandflash上 ?
A : 发现重新编译的内核还是大于2M,把内核烧录到jz2440看内核启动的打印信息
---》dev/mouse ps/2 是多余的可以去掉
---》cat /proc/filesystems 中romfs cramfs可以去掉
---》vi .configs 查看里面那些配置为"y"的可以去掉内核配置
如果实在改变不了 ,就要修改内核分区 >2M
裁剪成功小于2M
发现裁剪了很多,内核始终还有2.09M.最后用韦老师现成的config_ok配置内核
问 :制作uBoot的补丁?
[email protected]:/work/system/ tar xjf u-boot-2012.04.01.tar.bz2
[email protected]:/work/system/u-boot-2012.04.01$ make distclean
[email protected]:/work/system/ mv u-boot-2012.04.01 u-boot-2012.04.01_100ask
将修改了代码的u-boot-2012.04.01 改名为u-boot-2012.04.01_100ask
[email protected]:/work/system$ tar xjf u-boot-2012.04.01.tar.bz2
----》这里面就是未经绣修改的原汁原味的u-boot
.100ask.org:/work/system$ diff -urN u-boot-2012.04.01 u-boot-2012.04.01_100ask > u-boot-2012.04.01_100ask.patch
--->生成了 u-boot-2012.04.01_100ask.patch 补丁文件
发现打patch没有成功?????????????分析了半天没有找到原因
暂且先用自己之前移植的u-boot_3.4.2_bo.bin 来烧录吧!
问:如何烧录新的uBOOT ?
使用uboot来更新自己的:
nfs 30000000 192.168.2.102:/work/nfs_root/u-boot_3.4.2_bo.bin
nand erase 0 40000; nand write 30000000 u-boot
将拨码开关拨到nand启动,可以成功启动UBOOT,证明更新成功了
接下来就是烧录uimage和yaffs2文件系统
nfs 30000000 192.168.2.102:/work/nfs_root/uImage_bo;nand erase.part kernel; nand write 30000000 kernel
nfs 30000000 192.168.2.102:/work/nfs_root/fs_mini_mdev_new.yaffs2;nand erase.part rootfs; nand write.yaffs 30000000 260000 $(filesize)
nand write.yaffs 30000000 260000 $(filesize) 看韦老师 直接写成nand write.yaffs 30000000 260000 $filesize 是可以的
设置参数:
set 'nand read 30000000 kernel;bootm 30000000'
set machid 16a
save 后 reset 看下系统能否跑起来
为什么image 的地址自动变为30108000,不是设置的启动地址为30000000吗?
set 'nand read 30008040 kernel;bootm 30008040' 同样也不行 ,分析在u-boot 下使用mtd
怀疑是不是kernel里面的分区信息不匹配?
再回头看看100ask韦老师的分区设置为:
查看内核源码
[email protected]:/work/system/linux-3.4.2/arch/arm/mach-s3c24xx# vi common-smdk.c
将bootloader改为512K,重新编译烧录新内核 uImage_bo_mtd (主要是因内核分区和uboot里面的分区不匹配)
发现可以启动内核了,
跑到这里就不跑了,可以挂载文件系统,
仔细分析可能是因为自己的内核uboot 分区改了,导致 uImage 和 rootfs 的烧录位置不对,重新烧录rootfs试试看
之前的 :nfs 30000000 192.168.2.102:/work/nfs_root/fs_mini_mdev_new.yaffs2;nand erase.part rootfs; nand write.yaffs 30000000 260000 $(filesize)
修改后:
SMDK2410 # set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs2(之前uboot里面默认的是jffs2)
nfs 30000000 192.168.2.102:/work/nfs_root/fs_mini_mdev_new.yaffs2;nand erase.part rootfs; nand write.yaffs 30000000 2a0000 $(filesize)
SMDK2410 # mtdpart
device nand0 <jz2440-0>, # parts = 4
#: name size offset mask_flags
0: u-boot 0x00080000 0x00000000 0
1: params 0x00020000 0x00080000 0
2: kernel 0x00200000 0x000a0000 0
3: rootfs 0x0fd60000 0x002a0000 0
还是不行
考虑是不是nand 烧录rootfs的命令写的不对?
试着改为烧录jffs2吧:
nand write.jffs2:向Nand Flash写入jffs2镜像到相应的分区。
nand write.yaffs:同理,实现yaffs文件系统镜像的烧写,这个命令不一定所有版本的u-boot支
哈哈哈 ,烧录jffs2,reset后,烧录完成就OK了!
总结:
root:u-boot_3.4.2_bo.bin
uimage:uImage_bo_mtd (分区正确)
uImage_net 分区正确又支持网卡 ok
rootfs: fs_mini_mdev_new.jffs2
nfs 30000000 192.168.2.102:/work/nfs_root/fs_mini_mdev_new.jffs2;nand erase.part rootfs; nand write.jffs2 30000000 2a0000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
set machid 16a
save