3359|4

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

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




  • 此帖出自Linux开发论坛

    最新回复

    mark  详情 回复 发表于 2009-4-18 00:33
    点赞 关注

    回复
    举报

    76

    帖子

    0

    TA的资源

    一粒金砂(初级)

    沙发
     
    复制链接文件
    [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

    运行不了啊?!报错哦。我在/usr/lib/下运行的。楼主,怎么回事呢?
    此帖出自Linux开发论坛
     
     

    回复

    70

    帖子

    0

    TA的资源

    一粒金砂(初级)

    板凳
     
    引用 1 楼 wonsoft 的回复:
    复制链接文件
    [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

    运行不了啊?!报错哦。我在/usr/lib/下运行的。楼主,怎么回事呢?


    我是直接在命令行中运行的,后面做了一个文件,就没这个问题了。
    此帖出自Linux开发论坛
     
     
     

    回复

    84

    帖子

    0

    TA的资源

    一粒金砂(初级)

    4
     
    2.6.18不是连devfs的源代码树都没有吗了?还能这样做?怪怪哦
    此帖出自Linux开发论坛
     
     
     

    回复

    72

    帖子

    0

    TA的资源

    一粒金砂(初级)

    5
     
    mark
    此帖出自Linux开发论坛
     
     
     

    回复
    您需要登录后才可以回帖 登录 | 注册

    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表