建立Linux的根文件系统:
操作系统在启动时内核需要根文件系统来挂载,现代的Linux操作系统中,内核代码映像文件保存在根文件系统中,系统引导启动程序从这个根文件系统设备上把内核执行代码加载到内存中去运行。
我们采用的是Cramfs文件系统,它主要用于较小的ROM的嵌入式系统,他是一个压缩式的文件系统,它不需要一次性的将文件系统中的所有内容都解压缩到内存中,而只是需要哪一部分采取解压缩对应的部分
一、 根文件系统的一些基本目录
/bin 提供基本的命令库
/sbin 系统管理库
/dev 设备文件
/etc 系统配置文件
/lib 基本的系统库
/mnt 临时挂载的文件系统
/proc 系统的基本情况
/tmp 临时文件
当然还有一些其他的目录,这里列出的是我们自己创建文件系统所需要的最基本的目录。
二、 建立根文件系统的配置环境
下载busybox-1.13.1.tar.bz2,可以从www.busybox.net上下载到最新版本。在虚拟机的根目录下解压,进入busybox-1.13.1目录下。
1.
修改Makefile文件
这一步的修改是为了指定要用到的编译器为arm-linux-交叉编译器,体系结构为ARM,需要修改下面的部分:
ARCH ?= arm #$(SUBARCH) 176行
CROSS_COMPILE ?=arm-linux-
注意设置交叉编译的路径(即设置环境变量)
即:export PATH=/armtools/bin:$PATH
2.
配置busybox
make menuconfig
①Busybox
Settings(busybox配置组)
Busybox Settings --->
General Configuration
--->
Build Options --->
[*] Build BusyBox as a static binary (no shared
libs)
[ ] Build shared
libbusybox
Debugging Options
--->
Installation Options --->
[*] Don't use
/usr
Applets links (as soft-links)
--->
(./_install) BusyBox installation
prefix
Busybox Library Tuning --->
[*]代表必选项:
[*] Build
BusyBox as a static binary (no shared libs)表示应用静态库,
在嵌入式工作时一般首选,它不应用动态库,可以节省空间,在创建的ramdisk
的lib目录中可以加入动态库支持;
[ ] Build
shared libbusybox 表示应用动态库,这样会耗费空间。
[*] Don't use /usr这个选项是指编译后在_install目录下没有usr这个目录
② ---
Applets (命令配置组)
Archival Utilities ---> 文档选项
例如:压缩文件tar、gzip等命令;
Coreutils ---> 常用命令选项 一般/bin下的命令的选择点;
[*] Allow use of color to
identify file
types
[*] Produce colored ls output by default
3.
编译生成_install
export PATH=/armtools/bin:$PATH
arm-linux-gcc –v
make
make install
在busybox-1.13.1下完成这些命令后,会生成一些新的目录:bin和sbin
4.
设置根文件系统的目录
1) 在根目录下新建一个testfs 目录
cd /
mkdir testfs
cd testfs
mkdir rootfs
cp –raf /
busybox-1.13.1/_install/* rootfs
2) 手动创建mnt proc tmp sys 目录
3) 创建一个dev 目录
mkdir dev
cd dev
mknod -m 666 console c 5 1
mknod -m 666 zero c 1 3
4) 在rootfs下创建一个lib目录
cp raf /armtools/arm-linux/bin/* lib
rm -f lib/*.a
5) 在rootfs下创建一个etc目录
cd etc
touch inittab
gedit inittab
添加如下代码:(注意格式不要写错了)
::sysinit: etc/init.d/rcS
::sysinit: /bin/sh
6) 在etc 下创建init.b 目录
mkdir init.d
cd init.d
touch rcS
gedit rcS
添加如下代码:
#!/bin/sh
/bin/mount –a
7) 在etc 下创建 fstab 文件
touch fstab
添加如下代码:
none /proc proc defaults 0 0
8) 如何显示路径名
在 etc/proflie 中加入下面代码:
export ps1="[\u@\h \w]"
9)
编译生成 root.cramfs 烧入文件
mkfs.cramfs rootfs root.cramfs
编译完成后在rootfs目录下会生成root.cramfs 烧入文件。
注意:在烧入的过程中如果出现打不开文件的“cannot run 'etc/init.d/rcS':
Permission
denie”问题时,修改一下rcS文件的访问权限;详细步骤:在etc目录下输入命令:chmod 777 rcS
10) 如何在开发板上运行著名的“Hello World !”程序。
一种办法是在ubuntu上利用arm-linux-gcc -o hello hello.c
进行编译,将其拷进要编译的文件系统中,一起编译成root.cramfs文件。
启动开发板后,配置环境变量:export LD_LIBRARY_PATH=/lib,
然后在 “./hello”,就可以打印出预期的结果了。
另一种方法是将开发板挂载到虚拟机上,通过共享将 “hello”二进制文件拷贝过来。