免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 857 | 回复: 0
打印 上一主题 下一主题

linux-2.6.18内核移植及根文件系统的制做(简易) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 18:56 |只看该作者 |倒序浏览
linux-2.6.18内核移植及根文件系统的制做(简易)
一、        去 http://www.kernel.org 下载内核,下面以 linux-2.6.18.tar.bz2 为例。
        [root@Binnary ~ ]# tar –jxvf linux-2.6.18.tar.bz2
        [root@Binnary ~ ]# cd linux-2.6.18
二、        修改Makefile 文件
        [root@Binnary linux-2.6.18 ]# vi Makefile
        ARCH        ?= arm
        CROSS_COMPILE   ?= arm-linux-
三、查看开发板分区信息(以此以GEC2410为例)
        vivi>part show
         
        [root@Binnary linux-2.6.18 ]# vi arch/arm/mach-s3c2410/common-smdk.c
        static struct mtd_partition smdk_default_nand_part[] = {
     [0] = {
         .name   = "boot",
         .size   = 0x30000,
         .offset = 0,
     },
     [1] = {
         .name   = "kernel",
         .offset = 0x30000,
         .size   = 0x1d0000,
     },
     [2] = {
         .name   = "rootfs",
         .offset = 0x200000,
         .size   = 0x1f0000,
     },
     [3] = {
         .name   = "ext-fs",
         .offset = 0x2100000,
         .size   = 0x1f00000,
}/*,
  [4] = {
         .name   = "S3C2410 flash partition 4",
         .offset = SZ_1M * 10,
         .size   = SZ_4M,
     },
     [5] = {
         .name   = "S3C2410 flash partition 5",
         .offset = SZ_1M * 14,
         .size   = SZ_1M * 10,
     },
     [6] = {
         .name   = "S3C2410 flash partition 6",
         .offset = SZ_1M * 24,
         .size   = SZ_1M * 24,
     },
     [7] = {
         .name   = "S3C2410 flash partition 7",
         .offset = SZ_1M * 48,
         .size   = SZ_16M,
     }*/
};
三、        去掉ECC交验
        [root@Binnary linux-2.6.18 ]# vi drivers/mtd/nand/s3c2410.c
        575         chip->ecc.mode      = NAND_ECC_NONE;
        chip->ecc.mode = NAND_ECC_SOFT ,改为如下 chip->ecc.mode = NAND_ECC_NONE。  
四、        devfs的支持
        [root@Binnary linux-2.6.18 ]# vi fs/Kconfig
        在Pseudo filesystem主菜单添加我们要支持的内容。
        904 config DEVFS_FS
     905     bool "/dev file system support(OBSOLETE)"
     906     depends on EXPERIMENTAL
     907     default y
     908     help
     909         the help from binnary.
     910
     911 config DEVFS_MOUNT
     912     bool "automatically mount at boot"
     913     depends on DEVFS_FS
     914     default y
     915     help
     916         The help from Binnary.
     917
     918 config DEVFS_DEBUG
     919     bool "Debug devfs"
     920     depends on DEVFS_FS
     921     help
     922         The help from binnary.
     923
     924 endmenu
五、        yaffs2补丁
        [root@Binnary linux-2.6.18 ]# cd ..
        [root@Binnary ~ ]# tar –jxvf yaffs2.tar.bz2
        [root@Binnary ~ ]# cd yaffs
        [root@Binnary yaffs ]#./patch-ker.sh ../linux-2.6.18
六、        MTD分区的支持
        [root@Binnary linux-2.6.18 ]# cd ../linux-2.6.18
        [root@Binnary linux-2.6.18 ]# make smdk2410_defconfig
        [root@Binnary linux-2.6.18 ]# make menuconfig
        System Type  --->
                ARM system type (Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442)  --->
                        (X) Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442
                S3C24XX Implementations  --->
                       
  • SMDK2410/A9M2410
            Device Drivers  --->
                    Memory Technology Devices (MTD)  --->
                           
  • Memory Technology Device (MTD) support
                           
  •    MTD partitioning support                 
                           
  •      Command line partition table parsing
                           
  •    Direct char device access to MTD devices
                           
  •    Caching block device access to MTD devices
                            NAND Flash Device Drivers  --->
                                   
  • NAND Device Support
                                   
  • NAND Flash support for S3C2410/S3C2440 SoC
    七、        编译内核
            [root@Binnary linux-2.6.18 ]# make
            [root@Binnary linux-2.6.18 ]# cp arch/arm/boot/zImage /root
      
      
    根文件系统的制作
    [root@Binnary ~ ]# mkdir rootfs
    [root@Binnary ~ ]#cd rootfs
    [root@Binnary rootfs ]# mkdir bin dev etc lib proc sbin usr var tmp
    [root@Binnary rootfs ]#chmod 1777 tmp
    [root@Binnary rootfs ]#mkdir usr/bin usr/lib usr/sbin
    [root@Binnary rootfs ]#vi etc/fstab
            none        /proc        proc        defaults        0 0
    [root@Binnary rootfs ]#chmod 755 etc/fstab
      [root@Binnary rootfs ]#vi etc/inittab
    ::sysinit:/etc/init.d/rcS
    ::sysinit:/bin/sh
    [root@Binnary rootfs ]#chmod 7555 etc/inittab
    [root@Binnary rootfs ]#mkdir etc/init.d
    [root@Binnary rootfs ]#vi etc/init.d/rcS
    /bin/mount –a
    [root@Binnary rootfs ]# mknod –m 600 dev/console c 5 1
    [root@Binnary rootfs ]# mknod –m 666 dev/null c 1 3
    复制链接文件
    [root@binnary lib ]# for file in libc libcrypt libdl libm libpthread libresolv libutil
    >do
    >cp $file-*.so ~/rootfs/lib
    >cp –d $file.so.[*0-9] ~/rootfs/lib
    >done
    [root@binnary lib ]#cp –d ld*.so* ~/rootfs/lib
    [root@Binnary ~ ]# tar –jxvf busybox-1.9.2.tar.bz2
    [root@binnary ~ ]# cd busybox-1.9.2
    [root@binnary busybox-1.9.2 ]# make menuconfig
    [root@binnary busybox-1.9.2 ]# make
    [root@binnary busybox-1.9.2 ]#make install
    [root@binnary busybox-1.9.2 ]#cd _install
    [root@binnary _install ]# cp –Rvf * ~/rootfs/
      
    根据实际情况来修改下面的脚本文件:
    cd ~
    if [ -d ~/rootfs ] ;then        #判断家目录下是否有rootfs文件夹,如果话就退出程序
            echo "The home is have rootfs directory!!"
            echo "Can\`t create rootfs ,program exit. "
    else
            mkdir rootfs
            cd rootfs
            for file in bin dev etc lib proc sbin usr var tmp  #用for循环来创建文件夹
            do
                    mkdir $file
                    echo "The $file is create......"
            done
            chmod 1777 tmp
            echo "tmp directory right is 1777"
      
            mkdir  usr/bin usr/lib usr/sbin
            echo "Create usr/bin,lib,sbin"
            mkdir var/lib var/lock var/log var/run var/tmp
            chmod 1777 var/tmp
            echo "Create var/lib,lock,log,run,tmp"
      
            echo "none        /proc        proc        defaults        0 0" > etc/fstab
            chmod 755 etc/fstab
            echo "The fstab is create,the right is 755 ."
      
            echo "::sysinit:/etc/init.d/rcS" > etc/inittab
            echo "::sysinit:/bin/sh" >> etc/inittab
            chmod 755 etc/inittab
            echo "The inittab is create,the right is 755 ."
             
            touch etc/busybox.conf
      
            mkdir etc/init.d
            echo "#!/bin/sh" > etc/init.d/rcS
            echo "/bin/mount -a" >> etc/init.d/rcS
            chmod 755 etc/init.d/rcS
            echo " rcS is create,the right is 755"
             
            echo "#!/bin/sh" > etc/profile
            echo "PS1=[\\w]#" >> etc/profile
            echo "alias ll='ls -l'" >> etc/profile
            chmod 755 etc/profile
            echo "The profile is create.the right is 755."
      
            mknod -m 600 dev/console c 5 1
            mknod -m 666 dev/null c 1 3
            echo "console driver is create.c 5 1 the right is 600"
            echo "null driver is create. c 13 the right is 666"
      
            cd /armtools/arm-linux/lib
            for file in libc libcrypt libdl libm libpthread libresolv libutil
            do
            cp $file-*.so ~/rootfs/lib
            cp -d $file.so.[*0-9] ~/rootfs/lib
            done
            cp -d ld*.so* ~/rootfs/lib
      
            if [ "$1" = "" ] ;then  #判断 busybox 的路径
                    echo ""
                    echo "You don\`t input the busybox path."
                    echo "Please copy busybox file for youself."
                    echo ""
            else
                    if [ -d $1/_install ] ;then #复制busybox产生的文件
                            echo "copy busybox file ...... "
                            cd $1/_install
                            cp -Rvf $1/_install/* ~/rootfs/ > /dev/null
                            echo "copy busybox file is done."
                            cd ~
                            if [ -f ~/root.cramfs ] ;then
                                    echo "the root.cramfs is have.Please input the other name."
                                    read name
                                    echo "makeing file system ......"
                                    mkcramfs rootfs $name.cramfs
                                    echo "The file system is done."
                                    echo ""
                                    echo "The root.cramfs is at ~/$name.cramfs."
                                    echo ""
                            else
                                    echo "makeing file system ......"
                                    mkcramfs rootfs root.cramfs
                                    echo "The file system is done."
                                    echo ""
                                    echo "The root.cramfs is at ~/root.cramfs."
                                    echo ""
                            fi
                    else
                            echo ""
                            echo "You input the path is wrong.do not copy busybox file."
                            echo ""
                    fi
            fi
    fi
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/97043/showart_1933966.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP