物联网之系统移植五(根文件系统制作)

根文件系统制作

什么是根文件系统?

• 根文件系统(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设备节点

将制作的跟文件系统复制到nfs下:

配置文件一

• 文件 /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类型的格式

Filesystem

Write

Persistent

Compressed

        Media

Lives in RAM

nfs rootffs

 Yes

     No

        No

     RAM

Yes

EXT2 over RAM disk

Yes

     No

        No

     RAM

Yes

CRAMFS

   No

     N/A

         Yes

     Nor/Nand

No

JFFS2

  Yes

     Yes

        Yes

     Nor/Nand

No

YAFFS2

  Yes

     Yes

        Yes

       Nand

No

EXT2/EXT3

  Yes

    Yes

        No

        disk

No

猜你喜欢

转载自blog.csdn.net/weixin_39148042/article/details/82495052
今日推荐