busybox 根文件系统制作
来源:互联网 发布:linux文件下载到本地 编辑:程序博客网 时间:2024/04/29 21:46
busybox是构造文件系统最常用的软件工具包,它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序(busybox)中。
虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中已经足够了。
busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。
【实验目的】
熟悉Linux文件系统目录结构,创建自己的文件系统,通过NFS方式测试;用文件系统工具生成ramdisk文件系统映象文件。
【实验环境】
主机:ubuntu 12.04发行版
目标机:FS210平台
交叉编译工具:arm-none-linux-gnueabi-gcc
【实验步骤】
一、根文件系统制作
1、 源码下载
我们选择的版本是busybox-1.17.3.tar.bz2
下载路径为:http://busybox.net/downloads/
2、 解压源码
$ tar xvf busybox-1.17.3.tar.bz2
3、 进入源码目录,修改Makefile
$ cd busybox-1.17.3
vim Makefile
ARCH = arm
CROSS_COMPILE = arm-none-linux-gnueabi-
4、 配置源码
$ make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary(no shared libs)
[ ] Force NOMMU build
[ ] Build with Large File Support(for accessing files > 2 GB)
()Cross Compiler prefix
() Additional CFLAGS
Installation Options --->
[*] Don't use /usr
Appletslinks (as soft-links) --->
(./_install) BusyBoxinstallation prefix (NEW)
5、 编译
$ make
6、 安装
$ make install
busybox默认安装路径为源码目录下的_install
7、 进入安装目录下
$ cd _install
$ ls
bin linuxrc sbin
8、 创建其他需要的目录
$ mkdir dev etc mnt proc var tmp sys root lib home usr
9、 添加动态库
? 将工具链中的库拷贝到_install目录下的lib目录
$cp -raf/usr/local/toolchain-4.5.1-farsight/arm-none-linux-gnueabi/lib/* lib/
? 删除库文件中的符号表,也叫瘦身
$ rm -rf lib/*.a
$ arm-none-linux-gnueabi-strip lib/*
10、 添加系统启动文件
在_install/etc下添加文件inittab,文件内容如下:
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/ash
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
格式说明:
<id>:<runlevels>:<action>:<process>: 在什么时间启动什么进程
id: 进程所使用的终端名
runlevels:不用填写
<action>: Valid actions include:sysinit, respawn, askfirst, wait, once, restart, ctrlaltdel, and shutdown.\
sysinit: 系统初始化的时候,放在最前面
respawn,askfirst是一样的,如果process意外终止啦,系统会讲其重启
askfirst 会有提示Please press Enter to activate this console
wait: 该进程一定要执行完,才能执行下一个
once, 进程如果意外终止,那么不会重启
11,在_install/etc下添加文件fstab,文件内容如下:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
这里我们挂载的文件系统有三个proc、sysfs和tmpfs。在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持
修改内核配置:
File systems --->
Pseudo filesystems --->
[*] /proc file system support (NEW)
[*] sysfs file system support(NEW)
[*] Virtual memory file systemsupport (former shm fs)
[*] Tmpfs POSIX Access Control Lists
重新编译内核
12,在_install/etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:
cd _install/etc
mkdir init.d
vim init.d/rcS
===============================================
#!/bin/sh
echo ">>>>>>>>in/etc/init.d/rcS<<<<<<<<<<<<<<<<<"
/bin/mount -a
echo /sbin/mdev >/proc/sys/kernel/hotplug
/sbin/mdev -s
===============================================
mdev是用于自动创建设备节点
为rcS添加可执行权限:
$ chmod +x init.d/rcS
13,在_install/etc下添加profile文件,文件内容为:
#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
export PS1="[$USER@$HOSTNAME \W]\#"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
14、 设备文件创建
根文件系统中有一个设备节点是必须的,在dev下创建console节点
$ mknod dev/console c 5 1
以上的步骤就完成了linux根目录所需要的所有文件,可以直接使用
NFS测试
1、将做好的根目录复制成/opt/rootfs(如果你已经有这个目录,就要注意啦)
$sudo cp -raf _install /opt/rootfs
2, 在ubuntu中将/opt/rootfs设置成nfs文件系统
修改ubuntu的/etc/exports: 将/opt/rootfs设置成nfs文件系统格式
/opt/rootfs *(subtree_check,rw,no_root_squash,async)
sudo service nfs-kernel-server restart
测试:
sudo mount -t nfs 192.168.7.22:/opt/filesystem/ /mnt/nfs/
设置uboot环境变量
===========================================================================
# setenv bootcmd tftp 20800000 zImage \; go 20800000
# setenv bootargs root=nfs nfsroot=192.168.7.100:/opt/rootfs init=/linuxrc console=ttySAC0,115200 ip=192.168.7.200
# saveenv
===========================================================================
如果开机就运行一个自己可执行程序,可以做如下处理
1、编译出一个可执行程序:/bin/hello_arm/
2、/etc/init.d/rcS中启动可执行程序
方法一:直接在/etc/init.d/rcS添加一条:
/bin/hello_arm
方法二:另外再写一个脚本,然后在/etc/init.d/rcS中启动这个脚本
写一个脚本:/etc/local/mysrv.sh
#!/bin/ash
echo "my first app"
/bin/hello_arm
然后在/etc/init.d/rcS添加一条
/etc/local/mysrv.sh
重新启动开发板,查看是否能够正常挂载,功能是否正常
- BusyBox制作根文件系统
- busybox 根文件系统制作
- busybox制作根文件系统
- 用BusyBox制作根文件系统
- 使用Busybox制作根文件系统
- 根文件系统制作 busybox移植
- 用BusyBox制作根文件系统
- 用busybox制作根文件系统
- 使用Busybox制作根文件系统
- 用 busybox 制作 根文件系统
- 用busybox制作根文件系统
- 用busybox制作根文件系统
- 用busybox制作根文件系统
- 用busybox制作根文件系统
- 用busybox制作根文件系统
- 使用BusyBox制作根文件系统
- 用busybox制作根文件系统
- 利用busybox制作根文件系统
- jsp头部标签
- 为什么Java中1000==1000为false而100==100为true?
- bitmap占用的内存: imgWidth*(targetDen/imgDen) * imgHeight(targetDen/imgDen) * imgPixByte
- presto源码分析(hive orc读取)
- Linux下Thrift的C++编译流程
- busybox 根文件系统制作
- android 放大缩小图片
- Java就业经验
- container with most water(12.6)
- redis.conf详解
- ajax基础(1)
- Android自定义不需要焦点的TextView以实现跑马灯效果
- PTA-数据结构 5-18 银行业务队列简单模拟 (25分)
- Hexo博客同时部署在Github和Coding上