您的位置:首页 > 运维架构 > Linux

构建嵌入式linux系统 、制作根文件系统

2012-05-17 12:59 495 查看
主要命令:

   准备工具

    tar xf crosstoll-0.43.tar.gz

    sudo chmod a+w /opt   //  注意文件的可读写性

    sudo ln -sf bash sh  //注意运行shell 的 bash

    export PATH=$PATH:/opt/crosstoll/gcc-4.0.2-glib/arm-linux/bin //编译工具

    tar xf crosstoll.tar.bz2 -C/opt  //工具地方

  u-boot 命令

    setenv ipaddr 192.168.1.122

    printenv

    saveenv

    reset

    setenv bootmode nfs/nand

    parts /mtdparts /mtdparts default # 一般来说nand default 分u-boot kernel ext2 tmp

    nand erase kernel //nand 使用前要 erase   

    nand write 0x30008000 kernel 0x200000 //0x30008000 指内存中的地址前提是已经在它指向的地方有内容了 kernel 分区名 0x200000大小

    tftp 0x30008000 ext2fs.img //这个命令主要是利用TFTP 的面向无连接请内容数据向主机//tftp 建立看前面内容注意的是如果不能用的话,用apt-get rm 捍,重安一次就可以用了,还是就是文件的可用权限 777

    set bootcmd nand read 0x30008000 kernel 0x20000 ; myboot 0x30008000

    set bootargs noinitrd console=ttySAC0,115200

    set bootmode nand

    set init /linuxrc

    set root /dev/mtdblock2

    saveenv

    cat /proc/cmdline //

    myboot 0x30008000 //可以直接启动内核 在内存中

 nfs启动

    vi /etc/exports ;     /home/xxx/rootfs *(rw,sync,no_root_squash)

    mkdir ~/rootfs

    sudo mount -o loop /tftpboot/ext2fs.img ~/rootfs

    sudo /etc/init.d/nfs-kernel-server restart

    rpcinfo -p ; exportfs  //看看是否成功

yaffs 系统  //cramfs 只读不可写,一般用来放系统,另一个jffs 或yaffs可写用来放数据

    flash_eraseall /dev/mtd2  //flash_eraseall 来源于mtd

    mount -t yaffs /dev/mtdblock2 /mnt

    ls /mnt

    mkdir -p /mnt/proc /mnt/sys /mnt/dev /mnt/mnt /mnt/var/run

    mknod /mnt/dev/console -m 600 c 5 1   //console

    mknod /mnt/dev/null -m 666 c 1 3   //null

    mknod -m 600 /mnt/dev/s3c2410_serialo0 c 204 64  //serial

    umount mnt

    reboot

    set bootmode nand

    set root /dev/mtdblock2

    set bootargs noinitrd rootfstype=yaffs rw console=ttySAC0,115200

    saveenv

    reset

    

编译内核

    tar xf linux-2.6.26.tar.bz2

    cd linux-2.6.26

    找到Makefile 改  ARCH    ?=arm ;  CROSS_COMPILE ?=arm-linux-

    patch -p1 < ../patch-2.6.26-xx

    cp arch/arm/configs/ak2440_defconfig  .config

    make menuconfig

     出现一个对话窗口,进行自己的设置

    make

    cd arch/arm/boot/zImage  这个就是我们自己的内核

作用根文件系统

    mkdir -p bin dev etc/init.d etc/network etc/network/if-down.d etc/network/if-post-down.d etc/network/if-pre-up.d etc/network/if-up.d  lib mnt opt proc sbin srv sys tmp usr/bin usr/lib usr/sbin var/run

    下载busybox http://www.busybox.net/
    tar xf busybox-1.9.1.tar.bz2; cd busybox-1.9.1/

    和内核一样,找到ARCH ?=$(SUBARCH) 改为 ARCH  ?=arm  ;  CROSS_COMPILE ?=arm-linux-

    make defconfig

    make menuconfig

    根据爱好设置  //注意最后这一项:settting -->install options -->busybox installation prefix 内容改为自的目录 shell->choose shell

    make

    make install

        这时自已的文件中就有linuxrc 和其它/bin 文件下的内容了

    cd rootfs/dev; sudo mknod -m 600 console c 5 1 ; sudo mknod -m 666 null c 1 3 //console null

        //Documentation/devices.txt 中找到

    vi ~/rootfs/etc/inittab:

        ::sysinit:/etc/init.d/rcS

        ::respawn:/sbin/getty 115200 s3c2410_serial0

        ::restart:/sbin/init

        ::shutdown:/bin/nmount-a -r

    vi ~/rootfs/etc/init.d/rcS

        #!/bin/sh

        mount-a

    chmod +x rcS

    vi ~/rootfs/etc/fstab    

        #<file name> <mount point> <type> <options> <dump><pass>

        proc /proc proc defaults 0 0    //这些文件都是内核接口

        sys /sys sysfs default 0 0

        

    cd rootfs/dev; sudo mknod -m 600 s3c2410_serial0 c 204 64

    vi ~/rootfs/etc/passwd   //如果要密码的话:把主机上/etc/shadow 文件中root账号那一行放到开发板根文件系统中

        root::0:0:root:/:/bin/sh

    vi ~/rootfs/etc/group

        root::0:

            ----glibc--------

    cd /opt/crosstool/gcc-4.0.3.-glibc-2.3.6/arm-linux/arm/lib; cp -dp *  /home/xxx/rootfs/lib/

    cp crosstoll-0.43/build/arm-linux/gcc-4.0.2.-glic-2.6/build-glic/elf/ldconfig rootfs/sbin/

            --------mdev ----udev ------

    vi ~/rootfs/etc/init.d/rcS

        mount -t tmpfs mdev /dev

        mdev -s

        mkdir /dev/input

        ln -s /dev/mice /dev/input/mice

    touch rootfs/etc/mdev.conf

    cp /etc/localtime ~/rootfs/etc/    

    vi ~/rootfs/etc/init.d/rcS

        hwclock --hctosys

    vi ~/rootfs/etc/init.d/rcS

        ifup -a

    vi ~/rootfs/etc/network/interfaces

        auto lo

        iface l0 inet static

        address 192.168.1.2

        netmask 255.255.255.0

        gateway 192.168.1.125

    vi ~/rootfs/etc/network/interfaces

    httpd -h /src/www

    mkdir -p rootfs/src/www/cgi-bin

    最终的启动脚本:rcS

        #!/bin/sh

        mount -a

        mount -t tmpfs mdev /dev

        mdev -s

        mkdir /dev/input

        ln -s /dev/mice /dev/input/mice

        hwclock  --hctosys

        ifup -a

        httpd -h /src/www

        

    mkcramfs ~/rootfs rootfs.cramfs //制作自己的cramfs 文件

    

    

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息