移植內核之--- 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韋老師的分區設置爲:

查看內核源碼 

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

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章