05.移植內核3.4.2

1 uboot的啓動流程linux

由uboot的啓動流程可知,最後階段將會傳來兩個關鍵的參數。一個是機器id,另外一個是tag參數地址。而內核的任務是根據機器id選擇/判斷是否支持該機器,若是支持,則調用機器相關的初始化函數->解析TAG參數->裝載驅動程序->掛接根文件系統->啓動應用程序git

2 移植kernel的過程函數

  1 一. 內核啓動流程,據此配置內核(機器ID)
  2 1.1 修改Makefile
  3 1.2 選擇默認配置 : make s3c2410_defconfig
  4 1.3 make uImage
  5 
  6 步驟1:
  7 在UBOOT裏:
  8 set machid 16a   // smdk2440  mach-smdk2440.c
  9  10 set machid 7CF   // mini2440  mach-mini2440.c
 11 
 12 步驟2:
 13 arch\arm\mach-s3c24xx\mach-smdk2440.c
 14 s3c24xx_init_clocks(16934400);
 15 改成
 16 s3c24xx_init_clocks(12000000);
 17 
 18 步驟3:
 19 配置/編譯: make s3c2410_defconfig 或 make mini2440_defconfig
 20            make uImage
 21 
 22 步驟4:
 23 在uboot裏:set bootargs console=ttySAC0,115200 .....
 24 
 25 
 26 
 27 
 28 uboot的默認MACH ID:
 29 gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;  // 193
 30 若是s = getenv("machid");成功,則使用它
 31 不然使用默認的
 32 
 33 set machid 16a   // smdk2440  mach-smdk2440.c
 34 set machid 7CF   // mini2440  mach-mini2440.c
 35 
 36 nfs 32000000 192.168.1.123:/work/nfs_root/uImage_new
 37 bootm 32000000
 38 
 39 二. 修改分區, 製做新的文件系統
 40 
 41 
 42 nfs 30000000 192.168.1.123:/work/nfs_root/fs_mini_mdev.yaffs2
 43 nand erase.part rootfs
 44 nand write.yaffs 30000000 260000  889bc0
 45 
 46 nfs 30000000 192.168.1.123:/work/nfs_root/fs_mini_mdev.jffs2
 47 nand erase.part rootfs
 48 nand write.jffs2 30000000 260000  $filesize
 49 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
 50 
 51 
 52 製做文件系統
 53 1. 交叉編譯busybox
 54    安裝:make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new
 55 
 56 2. 安裝庫
 57 mkdir /work/nfs_root/fs_mini_mdev_new/lib
 58 mkdir /work/nfs_root/fs_mini_mdev_new/usr/lib -p
 59 
 60 cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so*  /work/nfs_root/fs_mini_mdev_new/lib -d
 61 cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so*  /work/nfs_root/fs_mini_mdev_new/usr/lib -d
 62 
 63 3. 構建etc目錄
 64 4. 構建dev目錄
 65 5. 其餘空目錄 
 66    
 67 mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2 
 68 
 69 燒寫:
 70 nfs 30000000 192.168.1.123:/work/nfs_root/fs_mini_mdev_new.jffs2
 71 nand erase.part rootfs
 72 nand write.jffs2 30000000 260000  $filesize
 73 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2 
 74 nfs 32000000 192.168.1.123:/work/nfs_root/uImage_new
 75 bootm 32000000
 76 
 77 SIGILL   illegal instruction
 78 6. 從新配置內核支持EABI
 79 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2 
 80 nfs 32000000 192.168.1.123:/work/nfs_root/uImage_eabi
 81 bootm 32000000
 82 
 83 三. 移植YAFFS文件系統
 84 1. 得到源碼
 85 git clone git://www.aleph1.co.uk/yaffs2 
 86 
 87 2. 打補丁
 88 
 89 cd yaffs-dir
 90 ./patch-ker.sh  c m linux-tree   好比 ./patch-ker.sh c m /work/system/linux-3.4.2
 91 
 92 3. 配置內核支持YAFFS
 93 
 94 4. 編譯、使用uImage
 95 
 96 5. 製做、燒寫yaffs映象
 97 mkyaffs2image fs_mini_mdev_new fs_mini_mdev_new.yaffs2
 98 uboot:
 99 nfs 30000000 192.168.1.123:/work/nfs_root/fs_mini_mdev_new.yaffs2
100 nand erase.part rootfs
101 nand write.yaffs 30000000 260000  $filesize
102 
103 6. 啓動
104 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
105 nfs 32000000 192.168.1.123:/work/nfs_root/uImage_yaffs
106 bootm 32000000
107 
108 7. 沒成功,用替代法查找問題
109 7.1 UBOOT可能有問題:換上1.1.6的UBOOT
110 tftp 30000000 u-boot.bin
111 nand erase.part u-boot
112 nand write 30000000 u-boot
113 reset
114 nfs 30000000 192.168.1.123:/work/nfs_root/fs_mini_mdev_new.yaffs2
115 nand erase rootfs
116 nand write.yaffs 30000000 260000  $(filesize)
117 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
118 nfs 32000000 192.168.1.123:/work/nfs_root/uImage_yaffs
119 bootm 32000000
120 
121 發現1.1.6的UBOOT沒問題,因此就是咱們移植的新UBOOT有BUG:
122 drivers\mtd\nand\Nand_util.c
123 
124     if (!need_skip && !(flags & WITH_DROP_FFS)) {
125 改成
126     if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {
127 
128 
129 7.2 YAFFS映象可能有問題
130 
131 
132 製做了u-boot_new.bin, uImage_new, fs_mini_mdev_new.yaffs
133 重燒整個系統:
134 使用jtag工具燒u-boot_new.bin
135 或使用uboot來更新本身: tftp 30000000 u-boot_new.bin; nand erase.part u-boot; nand write 30000000 u-boot
136 啓動uboot,用它來燒寫內核、FS
137 tftp 30000000 uImage_new; nand erase.part kernel; nand write 30000000 kernel
138 tftp 30000000 fs_mini_mdev_new.yaffs2; nand erase.part rootfs; nand write.yaffs 30000000 260000  $filesize
139 
140 設置參數
141 set 'nand read 30000000 kernel;bootm 30000000'
142 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
143 set machid 16a
144 save
145 
146 
147 使用內核補丁:
148 patch -p1 < ../linux-3.4.2_100ask.patch 
149 cp config_ok .config
150 make uImage
相關文章
相關標籤/搜索