文件系统的制作步骤
来源:互联网 发布:上海网络教育大学报名 编辑:程序博客网 时间:2024/04/30 08:46
文件系统的制作步骤
from:http://blog.sina.com.cn/s/blog_87766e4a0100z6lo.html
1、
[root@localhost /]#mkdir /root/build_rootfs
2、
[root@localhost /]# cd /root/build_rootfs/
[root@localhost build_rootfs]#mkdir rootfs
[root@localhost build_rootfs]#cd rootfs
[root@localhost rootfs]# mkdir bin dev etc usr lib sbin proc sys tmp
[root@localhost rootfs]# mkdir usr/bin usr/sbin usr/lib
/bin bin是Binary的缩写。这个目录存放着最经常使用的命令。
/sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/dev dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/usr 我们要用到的很多应用程序和文件几乎都存放在usr目录下
/usr/bin存放着许多应用程序;
/usr/sbin存放root超级用户使用的管理程序;
/usr/lib存放一些常用的动态链接共享库和静态档案库;
/lib这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/proc 是系统运行时进程和内核的信息存在这里,它属于伪文件系统,存在于内存中。
/tmp 用于用户程序运行时产生的临时文件。
/sys 内核所支持的sysfs文件系统。Sysfs把系统上的设备和总线组织成一个分级的文件,以被用户空间存取。
3、 交叉编译busybox
busybox的源码可以从http://www.busybox.net/downloads/下载,这里我们下载一个1.5.0版本的源码。
我们在配置busybox的时候是基于默认配置之上来配置的;先make defconfig就是把busybox配置成默认,然后再make menuconfig来配置busybox。
说明:我们在配置一个源代码包之前,可以先阅读源码包目录下的README和INSTALL文件以及Makefile的注释部分,也可以到http://www.busybox.net网站以获取帮助。
http://www.busybox.net/FAQ.html#configure的第二个问题2 How do I configure busybox?有介绍怎么去配置。
(1)
[root@localhost build_rootfs]# tar -zxvf busybox-1.15.3.tar.gz
[root@localhost build_rootfs]# tar -zxvf mkyaffs2image.tgz
[root@localhost build_rootfs]# tar -zxvf mkyaffs2image.tgz
usr/sbin/mkyaffs2image
usr/sbin/mkyaffs2image-128M
[root@localhost build_rootfs]# mv usr/sbin/mkyaffs2image mkyaffs2image
[root@localhost build_rootfs]# rm -rf usr
[root@localhost build_rootfs]# cd busybox-1.13.3
(2)
[root@localhost build_rootfs]# export PATH=/usr/local/arm/arm-linux-gcc/bin:$PATH
(3)
[root@localhost busybox-1.15.3]# make defconfig
[root@localhost busybox-1.15.3]# make menuconfig
手工配置如下:
如果您正在构建一个具有特殊需求的嵌入式设备,那就可以手工使用 make menuconfig目标来配置BusyBox 的内容。如果您熟悉 Linux 内核的编译过程,就会注意到 menuconfig 与配置 Linux 内核的内容所使用的目标相同。实际上,它们都采用了相同的基于 ncurses 的应用程序。
使用手工配置,我们可以指定在最终的 BusyBox 映像中包含的命令。我们也可以对 BusyBox 环境进行配置,例如包括对 NSA(美国国家安全代理)的安全增强 Linux(SELinux),指定要使用的编译器(用来在嵌入式环境中进行交叉编译)以及 BusyBox 应该静态编译还是动态编译。图 1 给出了 menuconfig的主界面。在这里我们应该可以看到可以为 BusyBox 配置的不同类型的应用程序(applet)。
Busybox setting
->builds options
->installitation options
->Busybox Library Tuning->
Miscellaneous Utilities ―> (c)
其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了。保存退出。
(a)这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作。
(b)这个选项也一定要选,否则make install后,busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.
( c)
taskset ?c 1 nohup perl pi.pl &
taskset ?c 1 ?P 10284
4、
[root@localhost busybox-1.15.3]# make ARCH=arm CROSS_COMPILE=arm-linux- CONFIG_PREFIX=/root/build_rootfs/rootfs all install
(此时bin(195个 290M) sbin(58个 86.4M ---windows下看的结果) 已安装了文件,其实是busybox的可执行文件和指向它的链接。不同的链接名完成不同的功能,命令行调用作为一个参数传给busybox,即可完成相应的功能,即于 BusyBox 中包含的每个工具来说,都会创建一个符号链接,这样就可以使用这些符号链接来调用 BusyBox 了。BusyBox 然后可以通过 argv[0] 来调用内部工具)
ARCH指定平台
CROSS_COMPILE指定交叉编译
CONFIG_PRRFIX指定安装的路径
5、
[root@localhost build_rootfs]#
cp /usr/local/arm/arm-linux-gcc/arm-none-linux-gnueabi/libc/armv4t/lib/* -a
交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/3.3.2/,所以链接库的目录是/usr/local/arm/3.3.2/lib(本来跟目标板相关的目录是/usr/local/arm/3.3.2/arm-linux, 因此要拷贝的链接库应该在/usr/local/arm/3.3.2/arm-linux/lib下,但是此目录的很多链接都是链接到/usr/local/arm/3.3.2/lib目录下的库文件,所以我们从/usr/local/arm/3.3.2/lib目录拷贝库),此目录下有四种类型的文件(其实就2种:.so动态库 .a静态库):
A、实际的共享链接库(libname-version.so)
如:libc-2.3.2.so
B、主修订版本的符号链接. (lib.so.version)
程序一旦链接了特定的链接库,它将会使用其符号链接,程序启动时,加载器在加载程序之前,会加载该文件。
C、与版本无关的符号链接(libname.so)
这些符号链接的只要功能是为需要链接特定的链接库的所有程序提供一个通用的条目,与版本号无关。
如:libc.so
(2) .a静态库
静态链接库包文件,如libc.a
6、
内核启动的最后,会执行sbin/init程序,init程序在启动的最后会执行/bin/sh,sh在启动的时候会读取文件。
(1)
[root@localhost build_rootfs]# cd rootfs/etc/
[root@localhost etc]# vi profile
#!/bin/sh
echo "Set seaech library in /etc/profile"
export LD_LIBRARY_PATH=/lib
echo "Set user path in /etc/profile"
export PATH=/bin:/sbin:/usr/bin
export PS1=[root@mini2440\ \\W]\\$
#export PS1=[root@mini2440]\#
(2)
[root@localhost etc]# vim inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
(3)
[root@localhost etc]# mkdir init.d
[root@localhost etc]#vi init.d/rcS
[root@localhost etc]#chmod +x rcS
#! /bin/sh
//“mount -a”命令后将挂载proc,tmpfs 等包含在该文件中的所有的文件系统。
/bin/mount -a
/bin/mount -t tmpfs mdev /dev
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev –s
l
l
l
(4)
[root@localhost etc]# vim fstab
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
则已经挂载的设备可以通过命令查询#lsmod
7、
[root@localhost rootfs]# mknod dev/console c 5 1
[root@localhost rootfs]# mknod dev/null
[root@localhost rootfs]# mknod dev/tty1 c 4 1
[root@localhost rootfs]# mknod dev/tty2 c 4 2
[root@localhost rootfs]# mknod dev/tty3 c 4 3
[root@localhost rootfs]# mknod dev/tty4 c 4 4
8、
[root@localhost build_rootfs]# vim hehho.c
[root@localhost build_rootfs]# arm-linux-gcc hello.c -o hello
[root@localhost build_rootfs]# cp hello /rootfs/usr/bin
随便写一个hello.c的用户程序,编译完之后放在usr/bin目录下,用于文件系统烧写后的测试
9、
[root@localhost build_rootfs]# ./mkyaffs2image-128M
10、
[u-boot@mini2440]#tftp 30008000 rootfs.yaffs2
[u-boot@mini2440]#nand erase 560000 40000000
//下载完提示下载了多大就多大,是16进制
[u-boot@mini2440]#nand write.yaffs
[u-boot@mini2440]#set bootargs 'noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M'
[u-boot@mini2440]#saveenv
[u-boot@mini2440]#reset
- 文件系统的制作步骤
- 文件系统制作步骤
- 制作带busybox的U盘文件系统详细步骤
- 制作ramdisk根文件系统的步骤和经验
- 使用BusyBox制作根文件系统的操作步骤
- 根文件系统的制作
- 根文件系统的制作
- Ramdisk文件系统的制作
- 文件系统的制作
- 根文件系统的制作
- yaffs2文件系统的制作
- 文件系统的制作
- Android文件系统的制作
- fl2440文件系统的制作
- 根文件系统的制作
- Yaffs2文件系统的制作
- 根文件系统的制作
- 根文件系统的制作
- 关于javascript中||与&&在函数调用中的使用
- JSP中RequestDispatcher的用法
- Unix 信号大全
- Jxl读取.xls文件(可读取所有的sheet)
- Dalvik JIT工作流程
- 文件系统的制作步骤
- android图形图表绘制控件
- 移植busybox1.15.0到OK2440V3开发板(3)---问题与解决
- 吹一吹效果实现
- 网页设计中的默认字体样式详解
- C练习1051
- C++缓冲区溢出
- DNW终端乱码解决
- 正则表达式学习