zoukankan      html  css  js  c++  java
  • 用busybox制作并配置根文件系统

    ===========================================================================
    一、根文件系统和busybox

    1) 在~目录下,创建一个rootfs目录,将其制作为nfs,目录结构如下(写一个脚本script.sh):
    mkdir bin dev etc lib mnt opt proc sbin srv sys tmp usr var
    cd etc 
    mkdir init.d network
    cd network
    touch if-down.d if-post-down.d if-pre-up.d if-up.d
    cd ../../usr
    mkdir bin lib sbin
    cd ../var
    mkdir run
    cd ../
    2) 解压 mc2440 下的 busybox-1.9.1.tar.bz2 到 /home/akaedu/下,得到文件夹busybox-1.9.1
    $ tar zxvf busybox-1.9.1.tar.bz2
    3) 进入内核目录
    $ cd busybox-1.9.1
    4) 修改Makefile,找到 (此处需修改Makefile)
    ARCH ?= $(SUBARCH)
    CROSS_COMPILE ?= 
         改为:
    ARCH ?= arm (后面不能有空格)
    CROSS_COMPILE ?= arm-linux-
    5) 以缺省配置为起点做进一步的配置
    $ make defconfig
    $ make menuconfig
        在菜单中做如下配置:
    #1 选中 BusyBox Settings——> Installation Options——>BusyBox installation prefix,设置为/home/akaedu/rootfs,busybox编译后安装到这个目录
    #2 根据需要裁剪各命令。但是Shell——>Choose your default shell选项一定要保留一个默认shell(如ash),
    (如果没有默认shell,将不会创建/bin/sh这个链接,而一般的shell脚本都是以#!/bin/sh开头的,若找不到/bin/sh就不能执行。)
    6) 编译和安装busybox
    $ make
    $ make install
    7) linuxrc需读取设备文件/dev/console和/dev/null,我们手动创建这些设备文件:
    $ cd rootfs/dev
    $ sudo mknod -m 600 console c 5 1
    $ sudo mknod -m 666 null c 1 3
    常见设备文件的设备号可以从内核代码的Documentation/devices.txt文件中查到
    8) 创建一个启动配置文件:~/rootfs/etc/inittab
    ::sysinit:/etc/init.d/rcS
    ::respawn:/sbin/getty 115200 s3c2410_serial0
    ::restart:/sbin/init
    ::shutdown:/bin/umount -a -r
    9) 启动的过程首先执行rcS启动脚本,创建这个脚本~/rootfs/etc/init.d/rcS (根据/etc/fstab配置文件提供的信息mount一些fs)
    #!/bin/sh
    mount -a
           这个脚本需加可执行权限:chmod +x rcS
    10) 创建/etc/fstab配置文件
    #<file name> <mount point> <type> <options> <dump> <pass>
    proc /proc proc defaults 0 0
    sys /sys sysfs defaults 0 0
    11) 执行完rcS,要执行respawn(如上8)),需创建s3c2410_serial0设备文件
    $ cd rootfs/dev
    $ sudo mknod -m 600 s3c2410_serial0 c 204 64
           这个设备号在内核代码的Documentation/arm/Samsung-S3C24XX/Overview.txt中可查到
    12) 打开终端会提示输入用户名和密码后才启动shell,需创建帐号文件passwd和group
    ~/rootfs/etc/passwd文件内容为:
    root::0:0:root:/:/bin/sh
    ~/rootfs/etc/group文件内容为:
    root::0:
           现在就创建了一个root帐号,没有密码。如需密码,可以把主机上的/etc/shadow文件中的root帐号的那一行放到开发板的根系统中。

    二、glibc
    由于busybox需要glibc共享库的支持,下面将在根文件系统中安装glibc。

    1) 解压crosstool.tar.bz2到/opt/目录下,得到文件夹crosstool
    $ tar  zxvf crosstool.tar.bz2
    2) 把共享库拷到根文件系统哦~/rootfs/lib目录下
    $ cd /opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/lib
    $ cp -dp * /home/akaedu/rootfs/lib
    3) 到~/rootfs/lib目录下删除掉所有的静态库和一些不常用的库。
    $ rm *.a
    $ rm *.o
      现在通过NFS启动开发板,应该可以成功启动到shell下了。

    三、mdev
    先前我们在根文件系统的/dev目录下手动创建了三个设备文件:console、null和s3c2410_serial0,内核里还有很多设备驱动需要通过设备文件提供给应用程序访问,若一个个手动创建太麻烦且容易出错,busybox提供mdev程序可以从sysfs中读出内核提供的设备驱动信息,在/dev目录下自动创建相应的设备文件并为这些设备文件命名。

    1) 把以下几行附加到启动脚本~/rootfs/etc/initd/rcS的末尾
    mount -t tmpfs mdev /dev
    mdev -s
    mkdir /dev/input
    ln -s /dev/mice /dev/input/mice
    2) mdev还需要一个配置文件mdev.conf,用于指定各设备文件的所有者和权限,其格式可参考busybox源代码中的docs/mdev.txt。我们不做特别的设置,但这个文件需存在,因此创建一个空文件。
    $ touch rootfs/etc/mdev.conf

      现在重新启动开发板,从minicom可以看到/dev目录下创建了很多设备文件,而主机上查看NFS目录~/rootfs/dev却仍然只有先前的三个设备文件,想一想为什么?

    四、系统时钟

    1) 将主机上的时区文件拷贝到开发板根文件系统
    $ cp /etc/localtime ~/rootfs/etc
    2) 在启动脚本~/rootfs/etc/init.d/rcS中添加一条命令
    hwclock --hctosys
    3) 修改开发板系统时钟
    #data 051815232012
    Wed May 15:23:00 CST 2011
         这时关闭系统,时钟信息还是会丢失。若在上述命令后用hwclock命令写到硬件RTC时钟,在系统断电期间RTC时钟由电池维持,下次启动通过hwclock --hctosys仍然可以将系统时钟设定正确。

    五、网络配置
    在bootloader中设置的开发板IP地址仅在bootloader阶段与主机通信时起作用。
    若是NFS Root方式启动,系统启动后的IP地址是由内核启动参数中的NFS设置决定的,这样系统启动后仍然可以读取主机的NFS导出目录。
    若是Nand Flash根文件系统启动,则启动后需重新配置IP地址和激活网络接口,我们可以把配置写在启动脚本~/rootfs/etc/init.d/rcS中:

    1) 在启动脚本~/rootfs/etc/init.d/rcS添加
    ifup -a
    2) 添加一个配置文件~/rootfs/etc/network/interfaces:
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet static
    address 192.168.0.10
    netmask 255.255.255.0
    gateway 192.168.0.1

    六、httpd
    busybox自带了一个Web服务器程序httpd
    1) 在在启动脚本~/rootfs/etc/init.d/rcS添加如下一行
    httpd -h /srv/www
    2) 在根文件系统中创建服务目录
    $ mkdir -p rootfs/srv/www/cgi-bin
      现在启动开发板系统,试验以下功能
    #1 编辑一个index.html放在~/rootfs/srv/www下,从主机上打开浏览器,输入开发板的IP地址看能否浏览
    <html>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <head>
    hello,man!
    </head>

    <body>
    how do you do!
    </body>
    </html>
    3) 编译一个shell脚本,加可执行权限,放在~/rootfs/srv/www/cgi-bin,从主机打开浏览器,输入该脚本的地址(如:)
    #!/bin/sh
    echo "Content-Type:text/plain"
    echo
    ls -l

    七、将自己定制的根文件系统下载到开发板上运行
    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    SAP MM 采购附加费计入物料成本之二
    SAP MM 采购附加费计入物料成本?
    SAP MM 作为采购附加费的运费为啥没能在收货的时候计入物料成本?
    SAP MM 外部采购流程里的Advanced Return Management
    SAP MM 外部采购流程里的如同鸡肋一样的Advanced Returns Management功能
    SAP MM Why is the freight not included in the material cost at the time of GR?
    SAP MM: Change of material moving average price after goods receipt and invoice verification posting for PO
    SAP 创建启用了ARM功能的采购订单,报错 Shipping processing is not selected to supplier 100057 in purchase org. 0002
    GIT·代码仓库默认分支更改
    .Net/C#·运行报错缺少XXX文件,但双击无法跳转缺少位置
  • 原文地址:https://www.cnblogs.com/iplus/p/4467381.html
Copyright © 2011-2022 走看看