根文件系统移植
- 格式:doc
- 大小:1.39 MB
- 文档页数:21
嵌入式web服务器boa移植到mini2440开发板详细过程1、概述为了和开发板上用的httpd服务,我选用的服务器是boa,boa已经没有更新了,但是现在的应用仍然很大,当然更先进的AppWeb当然是更好的选择,不过学习应先从简单的入手。
本教程使用环境是Red Hat Enterprise Linux 6,交叉编译工具是arm-linux-gcc4.3.2,开发板是mini2440,开发板内核是2.6.32.2、到/下载源码,boa最终版是0.94.133、解压文件1)解压[root@localhostopen_source]# lsboa-0.94.13.tar.gz[root@localhostopen_source]# tar -xvfboa-0.94.13.tar.gz -C ./[root@localhostopen_source]# lsboa-0.94.13 boa-0.94.13.tar.gz2)为了和X86版本区别把解压出来的文件夹boa-0.94.13重新命名为boa-0.94.13_arm[root@localhostopen_source]# mv boa-0.94.13 boa-0.94.13_arm4. 编译前修改工作(主要是因为boa太久没有更新,目前相对说比较老,要修改下才能通过编译)1)修改vicompat.h文件[root@localhostopen_source]# lsboa-0.94.13_arm boa-0.94.13.tar.gz[root@localhostopen_source]# cd boa-0.94.13_arm/src/[root@localhostsrc]# vicompat.h找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff即将120行和126行的foo##->tm_gmtoff改为foo->tm_gmtoff否则会出现错误:util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 错误12)修改src/log.c注释掉if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}为:/*if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}*/否则会出现错误:log.c:73 unable to dup2 the error log:bad file descriptor3)修改src/boa.c注释掉下面两句话:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”);}为#if 0if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”);}#endif否则会出现错误:boa.c:211 - getpwuid: No such file or directory。
实验五 根文件系统移植 实验目的: 通过本次实验,使大家学会根文件系统移植的具体步骤,并对根文件系统有更近一步的感官认识。让同学理解由于根文件系统是内核启动时挂在的第一个文件系统,那么根文件系统就要包括Linux启动时所必须的目录和关键性的文件,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。
实验硬件条件: 1、实验PC机一台,TINY6410开发板一台 2、电源线,串口线,数据线。
实验软件条件: 1、 VMware Workstation, 2、 Ubuntu10.04 3、 mktools-20110720.tar.gz 4、 busybox-1.13.3-mini2440.tgz, 5、 SecureCRT以及dnw烧写工具
实验步骤: 一、 实验步骤 1. 进入rootfs目录,查看压缩文件,具体操作指令如下: 2. 发现有两个压缩文件夹,分别进行解压: 3. tar xvzf busybox-1.13.3-mini2440.tgz, 4. tar xvzf mktools-20110720.tar.gz,解压完成后, 5. 查看文件夹#ls 二、 实验步骤 1. 修改架构,编译器#cd busybox-1.13.3/ 2. 进入后查看#ls 3. #gedit Makefile 4. 修改 164行 CROSS_COMPILE ?=arm-linux-
5. 修改 190行 ARCH ?= arm
6. 保存后,退出! 三、 实验步骤 1. 修改配置 #make menuconfig
2. 若出现如下提示 3. 需调整到最大化。 4. 把Busybox Settings ----->Build Option ------> Build BusyBox as astatic binary (no shared libs) 选择上,其他的默认即可。
然后一直退出,保存即可 5. 接着执行 make接着执行 make install 6. 最终生成的文件在_install 中 #cd _install #ls存在这四个文件,即编译成功。 四、 实验步骤 1、 编写脚本文件,生成文件系统基本框架。 mkdir /home/tom/source/rootfs/arm-rootfs cd /home/tom/source/rootfs/arm-rootfs 2、 #gedit mkrootfs.sh 将如下内容复制到mkrootfs.sh中 #!/bin/sh echo "------Create rootfs directons start...--------" mkdir rootfs cd rootfs echo "--------Create root,dev....----------" mkdir root dev etc boot tmp var sys proc lib usr mnt home mkdir etc/init.d etc/rc.d etc/sysconfig mkdir usr/sbin usr/bin usr/lib usr/modules echo "make node indev/console dev/null" mknod -m 600 dev/console c 5 1 mknod -m 600 dev/null c 1 3 mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/run var/tmp chmod 1777 tmp chmod 1777 var/tmp echo "-------make direction done---------" 保存并退出 3、 修改mkrootfs.sh权限。
password for tom:123456 然后执行 #./mkrootfs.sh,会生成rootfs文件。 #cd rootfs 看到上述文件框架已经做好。 接着将busybox生成四个文件(_install下) 4、 拷贝到 /home/tom/source/rootfs/arm-rootfs/rootfs目录下。
选择Merge All全部替换 五、 实验步骤 1、添加文件系统的配置信息和启动项 进入etc目录#cd etc(rootfs下的etc文件) #cd sysonfig #gedit HOSTNAME S-601(内容随意输入,这里只为了规范) 保存并退出! 2、增加如下文件: 从主机根目录/etc中复制group,passwd,shadow到 /home/tom/source/rootfs/arm-rootfs/rootfs/etc 具体步骤如下: cp /etc/group home/tom/source/rootfs/arm-rootfs/rootfs/etc/ cp /etc/passwd home/tom/source/rootfs/arm-rootfs/rootfs/etc/ sudo cp /etc/shadow home/tom/source/rootfs/arm-rootfs/rootfs/etc/ 密码:123456
注:也可手动拖拽;复制后etc文件内容如下: 3、 #gedit profile 复制如下内容:
#Ash profile #vim:syntax=sh #No core file by defaults #ulimit -S -c 0>/dev/null 2>&1 USER="id -un" LOGNAME=$USER PS1='[\u@\h=W]#' PATH=$PATH HOSTNAME='/bin/hostname' export USER LOGNAME PS1 PATH
4、 #gedit inttab 复制如下内容: #etc/inittab ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a –r
5、#gedit fstab 复制如下内容: #device mount-point type option dump fsck order proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 mdev /dev ramfs defaults 0 0 接下来进入etc/init.d文件
6、 #gedit rcS 复制如下内容: #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel echo "----------munt all----------------" mount -a echo /sbin/mdev>/proc/sys/kernel/hotplug mdev -s echo "****************Studying ARM*********************" echo "Kernel version:linux-2.6.38" echo "Student" echo "Date:2012.12.10" echo "***********************************************" /bin/hostname -F /etc/sysconfig/HOSTNAME 并修改权限#sudo chmod 777 rcS
设置设备节点: 进入rootfs下的dev文件 #sudo mknod –m 600 console c 5 1 #sudo mknod –m 600 null c 1 3 然后退到上级目录#cd .. 解除dev文件下所有文件权限: Sudo chmod 777 dev –R 到这里,恭喜你,文件系统基本搭建起来了。 六、 实验步骤 编译: 我要把文件系统编译成为ubi文件系统格式 将/home/tom/source/rootfs/usr/sbin下的mkubimage和mkubimage-slc文件拷贝到 /home/tom/source/rootfs/arm-rootfs下 接下来#sudo ./mkubimage-slc rootfs rootfs.ubi 并解除rootfs.ubi权限 #sudo chmod 777 rootfs.ubi 到这里实验就全部结束,生成的根文件系统rootfs.ubi在 /home/tom/source/rootfs/arm-rootfs下,可用DNW将其烧到开发板上进行测试。
实验结果:在本次试验中我们涉及到的知识很多,理解起来比较难,老师讲的很详细但有些地方还不是很理解,本次试验我们是做根文件系统的移植,通过多个命令的执行和修改最后搭建起了文件系统,在这个过程中我们遇到了很多问题,主要是没有对根文件系统移植有很好的理解,还好在老师的帮助下完成了,我学到了很多知识,对以后的学习很有帮助。