物聯網之系統移植五(根文件系統製作)

根文件系統製作

什麼是根文件系統?

• 根文件系統(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章