linux-3.4.2内核移植

Linux内核移植:linu-4.3.2

一:内核的启动流程分析


   

二:配置内核机器

   a: 下载linux-3.4.2.tar.bz2

   b: 解压 tar xjf linux-3.4.2.tar.bz2

   c:  修改Makefile :viMakefile  搜索:/ARCH

        ARCH            ?= arm

        CROSS_COMPILE   ?= arm-linux-

   d:找到默认配置 :find -name “*defconfig”

   e:进入我们需要的架构里面找到我们对应的单板配置

       cd  arch/arm/configs

        ls *2440*

        make s3c2410_defconfig 生成.config

   f:烧到板子上面

       tftp 32000000 uImage

       bootm  320000000

        出现乱码证明机器ID不对

   g:查看u-boot源码设置ID

       uboot的默认MACH ID:

      gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;  // 193

     如果s =getenv("machid");成功,则使用它,可以通过u-boot设置machid

      否则使用默认的

   1:查看这两种单板的初始化函数mach-smdk2440.c和mach-mini2440.c,并修改单板所用的晶振值:  12M

         vi arch\arm\mach-s3c24xx\mach-smdk2440.c

         :165     在165行修改如下

         s3c24xx_init_clocks(16934400);

         改为

       s3c24xx_init_clocks(12000000);

   2:  set bootargs console=ttySAC0,115200 root=/dev/mtdblock3

   3 :  设置machid

       set machid16a   // smdk2440  mach-smdk2440.c

        或

      set machid7CF   // mini2440  mach-mini2440.c

    4:重新配置并编译内核

         make s3c2410_defconfig 或 makemini2440_defconfig

          make uImage

    5  :烧写内核

         tftp 32000000 uImage

         bootm 30000000

   可以看到进入了内核

       

   h:查看支持多少种单板支持

    cd  arch/arm/

    find  -name *mach*.o*

 

三:修改内核分区表

   查看内核答应信息可以看到挂在文件系统不成功,分区表和我们u-boot的分区表不一致

修改分区表

怎样修改分区表????

 

   a: 查找这个分区名

      grep “\"Boot\ Agent\"” * -Nr

   b:分区表在这个文件中: 

       linux-3.4.2\arch\arm\mach-s3c24xx\Common-smdk.c 

        在这个文件的113行修改为如下图

     

       

    d: 编译并下载 :可从内核的打印信息得知分区表出来了

 

四:加入文件系统

    Linux-3.4.2默认不支持yaffs文件系统,先用jffs2文件系统

   a: 下载jffs2文件系统并设置环境变量

        tftp  30000000  fs_mini_mdev.jffs2

       nand erase.part rootfs

       nand write.jffs2 30000000 260000 $filesize  (filesize根据u-boot的版本)

       set bootargs console=ttySAC0,115200 root=/dev/mtdblock3rootfstype=jffs2

   b:烧写内核

         tftp 32000000 uImage &&bootm 32000000

   c:出现问题

 

五:创建新的文件系统:jffs2

     a:tar xjf busybox-1.20.0.tar.bz2

           cd  busybox-1.20

          make menuconfig

          选择交叉编译工具链

          -> BusyboxSettings

                Buildoptions 

                   Crosscompiler prefix

                       设置成arm-linux-

                               最后退出一步make

 

   b:

       1:vi README

        2: 安装busybox-1.20.0 :make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new

        3:安装库看服务器上面的交叉编译连库

             echo $PATH

             /usr/local/arm/4.3.2/bin/

             cd /usr/local/arm/4.3.2

             find -neme lib(找到库文件)

 

        4:安装库文件

             cd ./arm-none-linux-gnueabi/libc/armv4t/lib

             在这个文件里面建立一个文件夹lib

              /work/nfs_root/fs_mini_mdev_new$ mkdir lib

             在这个文件里面建立一个文件夹usr/lib

             mkdir  /work/nfs_root/fs_mini_mdev_new/usr/lib-p

             把工具链里面的库全部拷贝到/work/nfs_root/fs_mini_mdev_new/lib目录下

             cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so*  /work/nfs_root/fs_mini_mdev_new/lib -d

              把工具链里面的库全部拷贝到/work/nfs_root/fs_mini_mdev_new/usr/lib目录下

              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

 

           5: 从以前的文件系统拷贝etc目录

             /work/nfs_root/fs_mini_mdev$ cp etc/ /work/nfs_root/fs_mini_mdev_new/ -rf

                 viinittab 修改如下

           console::askfirst:-/bin/sh

 

           6:安装dev目录

                 mkdir dev

                  ls -l /dev/console  /dev/null

                  crw------- 1 root root 5, 1 2014-10-27 19:41 /dev/console

                  crwxrwxrwx 1 root root 1, 3 2014-10-22 19:01 /dev/null

                  sudo mknod dev/console c 5 1

                 sudo mknod dev/null c 1 3

 

          7:创建其他目录

                 mkdir  proctmp mnt sys root

 

         8:生成jffs2文件系统

                mkfs.jffs2 -n -s 2048 -e128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2

 

          9:烧写 

                tftp 30000000 fs_mini_mdev_new.jffs2

                nand erase.part rootfs

                nand write.jffs2 30000000 260000 $filesize

                set bootargs console=ttySAC0,115200 root=/dev/mtdblock3rootfstype=jffs2

                tftp 32000000 uImage&& bootm 32000000

 

         10:. 重新配置内核支持EAB

 

  

六:创建yaffs文件系统

   a:下载yaffs2文件系统的源码

   b:viREADME-LINUX

           


   c: yaffs2源码打补丁到linux内核中去

          ./patch-ker.sh c m /work/system/linux-3.4.2

   d: 配置内核支持yaffs2文件系统

       makemenuconfig

         -> File systems                                                    

        -> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])             

         -> yaffs2 file system support (YAFFS_FS [=n])      把这个文件选中      

           -> 512 byte / page devices (YAFFS_YAFFS1 [=n])               

            -> Use older-style on-NAND data format with pageStatus byte

   e:修改内核源码

        把yaffs2添加到sourceinsght 里面去

        makeuImage 有很多错误

        修改错误发现结构体里面的定义和yaffs文件中的不一样

   f:制作yaffs2文件系统

        cd  /work/nfs_root/

         mkyaffs2image fs_mini_mdev_new  fs_mini_mdev_new.yaffs2

   g:烧写内核和文件系统

         tftp 30000000 fs_mini_mdev_new.yaffs2

         nand erase.part rootfs

         nand write.jffs2 30000000 260000 $filesize

         set bootargs console=ttySAC0,115200 root=/dev/mtdblock3rootfstype=jffs2

         tftp 32000000 uImage&& bootm 32000000

 

                                          

         nand_flash: 按页来划分  一页2048byte  还有校验oob但是没有包括在nandflash的空间中

         nandflash有位反转  引入了oob

 

        下面是读写nandflash的操作,yaffs文件系统

           

            

 

 

七:裁剪内核

    1:修改支持的单板

         make  menconfig

         找到编译进内核的单板

              System Type

               SAMSUNG  S3C24XX  SoCs Support

          设置成如下

              

     

 

    2:File systems

         修改成如图  :嵌入式不需要支持这种文件系统

          

           

     3:  文件系统裁剪键盘鼠标光盘

              


      4: 接下来查看.config修改menuconfig

          

      

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值