zoukankan      html  css  js  c++  java
  • 05.移植内核3.4.2

    1 uboot的启动流程

    由uboot的启动流程可知,最后阶段将会传来两个关键的参数。一个是机器id,另一个是tag参数地址。而内核的任务是根据机器id选择/判断是否支持该机器,如果支持,则调用机器相关的初始化函数->解析TAG参数->装载驱动程序->挂接根文件系统->启动应用程序

    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 archarmmach-s3c24xxmach-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 driversmtd
    andNand_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
  • 相关阅读:
    查找目录中同名的文件或者文件夹
    「JOISC 2014 Day1」历史研究 --- 回滚莫队
    CSP2019 —— 今年欢笑复明年,不知退役在眼前
    C++实现,拓展中国剩余定理——解同余方程组(理论证明和代码实现)
    [SDOI2016]征途 —— 斜率优化DP
    codeforces#1215E. Marbles(状压DP)
    浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法
    C++[Tarjan求点双连通分量,割点][HNOI2012]矿场搭建
    浅谈数学上的矩阵——矩阵的乘法运算的概念及C++上的实现模板
    C++边双缩点,Redundant Paths 分离的路径
  • 原文地址:https://www.cnblogs.com/Lwd-linux/p/6364665.html
Copyright © 2011-2022 走看看