移植内核之--- 3.4.2内核裁剪和打补丁

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27516841/article/details/87800423


问 :将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韦老师的分区设置为:

查看内核源码 

root@book-virtual-machine:/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了!

总结:

rootu-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

猜你喜欢

转载自blog.csdn.net/qq_27516841/article/details/87800423