• 用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....
  • 相关阅读:
    SpringMVC 多文件上传
    get传参乱码问题
    springMVC配置
    带参sql$和#的区别(注解)
    java多线程--实现Runnable接口方式
    java复制文件夹及所有子目录和文件
    Angularjs 学习笔记
    springboot 项目 docker化部署
    docker 基础
    Java-马士兵动态代理模式
  • 原文地址:https://www.cnblogs.com/iplus/p/4467381.html
Copyright © 2020-2023  润新知