根文件系统制作

什么是根文件系统?

根文件系统(root  filesystem)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以安装各种软件包。

根文件系统主要目录结构

目录

内容

/bin

可执行程序

/dev

块、字符设备节点文件
/etc主要配置文件和初始化执行文件

/lib

基本的库文件, 茹:C 库,和内核模块(modules)

/mnt

挂载点,临时挂载文件系统用

/opt

附加的软件包

/proc

虚拟文件系统,用于内核和进程通讯

/sbin

基本的系统管理程序

/tmp

临时文件目录

/usr

更多的用户程序,包括X server

/sys

虚拟文件系统 sysfs 挂载点

/var

可变信息储存,如log等

程序文件的放置

程序文件目录

/bin: 普通用户和root用户都能执行的基本程序
ping, mknod, mount, tar, grep, gzip, etc

/sbin: root用户能执行的基本程序
int, insmod, route, mkfs, rmmod, ifconfig

/usr/bin: 更多非必须的用户程序
autorun, bibtex, latex, biff, ftp, wc, whereis, whoami

/usr/sbin: 更多非必须的root工具程序
automount, httpd, in.telnetd, in.talkd, sendmail

定制应用程序

配置基本的linux命令(嵌入式linux通过busybox制作)
cat, chmod, chown, cp, chroot, copi, date, dd, df, dmesg, dos2unix, du, echo, env, expr, find, grep, gunzip, gzip, halt, id, ifconfig, init, insmod等等
配置用户自己的应用
桌面管理器等等

库文件的放置

/lib: 系统和运行基本命令时需要的动态库文件
/usr/lib:所有的其他库
/usr/lib/xxx: 一些工具包的私有库
如:/usr/lib/perl5

Linux 设备文件

Linux 系统中所有的对象(包括设备)都是以文件的形式体现的
Linux系统中,所有的设备文件(如:设备节点),通常放到 /dev下
嵌入式系统中只需要创建必须的设备节点即可

字符设备举例

ls –l  /dev/  “c” 指明该设备节点是字符设备
crw-rw---- 1 root uucp  4,    64 Feb 23 2004 /dev/ttyS0
crw--w---- 1 jdoe tty    136, 1   Feb 23 2004 /dev/pts/1
crw-------- 1 root root   13,   32 Feb 23 2004 /dev/input/mouse0
crw-rw-rw 1 root root   1,    3    Feb 23 2004 /dev/null
典型设备
keyboards, mice, parallel port, IrDA, Bluetooth port, consoles, terminals, sound, video...

块设备举例

“b” 指明该设备节点是块设备 (ls -l)
brw-rw--- 1 root disk      3, 1 Feb 23 2004 hda1
brw-rw--- 1 jdoe floppy  2, 0 Feb 23 2004 fd0
brw-rw--- 1 root disk      7, 0 Feb 23 2004 loop0
brw-rw--- 1 root disk      1, 1 Feb 23 2004 ram1
brw------- 1 root root      8, 1 Feb 23 2004 sda1
典型块设备
磁盘, ramdisk,SD,U盘等等

设备的主设备号次设备号

Linux系统是通过主设备号和次设备号来区分设备的
主设备号: (major)
内核用来区分哪类设备
次设备号: (minor)
区分某类设备中的哪个设备
内核中的相关文档 Documentation/devices.txt

创建设备节点

设备文件不能在加载驱动程序时自动创建,要通过指令创建
创建设备文件的一般语法:
$ mknod /dev/<device> [c|b] <major> <minor>
例如:
$ mknod  /dev/ttySAC0  c  4  64
$ mknod  /dev/hda1  b  3  1

基本的设备节点

名称

描述

Major 

Minor 

mem

物理内存访问设备

1

1

null

Null 设备

1

3

zero

从该设备读取将得到零

1

5

random

非确定随机数发生设备

1

8

tty0

当前的虚拟终端设备

4

0

tty1

第一个虚拟终端设备

4

1

ttySAC0

第一个串口设备

4

64

tty

当前的 TTY 设备

5

0

console

系统console设备

5

1

Linux系统的引导过程

BusyBox项目构建系统命令

BusyBox 项目是由Bruce Perens in 在1996创建的
        http://www.busybox.net/
        BusyBox 是在 GNU GPL 许可协议下发行的开源软件
享有“嵌入式Linux的瑞士军刀”美誉,Erik Andersen先生维护;
Busybox是一个UNIX系统工具集,它将很多普通的UNIX工具集成到一个很小的可执行文件中,为普通用户提供大多数常用的命令;
BusyBox常用于制作linux命令 主要指令包括   
cat, chmod, chown, cp, chroot, copi, date, dd, df, dmesg, dos2unix, du, echo, env, expr, find, grep, gunzip, gzip, halt, id, ifconfig, init, insmod, etc

文件系统制作步骤

制作根文件系统的内容
        采用Busybox创建基本命令
        创建基本的目录 /lib /etc /var /tmp /dev /sys /proc等
        添加glibc基本动态库
        创建基本的设备节点
        添加启动配置和脚本程序 /etc/inittab   /etc/fstab /etc/init.d/rcS
测试rootfs内容正确性
制作需要的rootfs类型的格式

制作根文件系统的内容

$ tar  xvf  busybox-1.22.1.tar.bz2
$ cd  busybox-1.22.1
$ make menuconfig
    Busybox Settings --->
    Build Options --->
        [*] Build BusyBox as a static binary (no shared libs)
        (arm-none-linux-gnueabi-) Cross Compiler prefix   注意 一定要指定交叉编译工具
$ make
$ file busybox   确认编译生成的是 ARM 平台的(显示为ELF 32-bit LSB executable, ARM)
$ make  install   安装(默认安装路径为_install)
$ cd _install
$  ls
      bin  linuxrc  sbin  usr
$ mkdir  dev  etc  mnt  proc  var  tmp  sys  root       创建需要的目录
$ cp  ~/store/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/  .  -a      注意是lib/
$ du -mh lib     查看lib库的大小
$ rm  lib/*.a     裁剪,删除掉静态库文件  
$ arm-none-linux-gnueabi-strip  lib   裁剪掉调试信息   not recognized  有些库是不能strip的 忽略掉
$ sudo rm  lib/libstdc++*   删除不需要的库,确保所有库大小不超过4M  
$ du -mh lib    查看lib库的大小  可能 显示3.4M lib   (这里确保小于 8M)     
$ cp /nfs/rootfs/etc   -rf   .      拷入成熟的参考配置
$sudo mknod   dev/console  c  5  1      必须要有  console设备节点

配置文件一

文件 /etc/inittab
#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS  指定系统初始化脚本是rcS 也可指定别的名字,但习惯用rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh    指定初始的控制台(启动后进入# 状态)  
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot

文件 /etc/init.d/rcS(启动脚本)
#!/bin/sh
# This is the first script called by init process
/bin/mount  -a                                 mount all stuff from /etc/fstab  
/etc/init.d/rc.local                           扩展子脚本
echo  /sbin/mdev  >  /proc/sys/kernel/hotplug  设置系统的hotplug程序为mdev
/sbin/mdev  -s                                 
./app.exe   //让脚本自动运行你的程序

配置文件二

文件 /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

文件 /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

测试rootfs内容正确性

$ cd /nfs
$ mkdir rootfs
$ cp  _install/*   rootfs   –a                        
$ chmod 777 /nfs/rootfs/                     
NFS能挂载成功表示根文件系统 内容基本正确

制作需要的rootfs类型的格式

  • 34
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值