68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁(yè) 新聞資訊 >> 新聞?lì)^條 >> 嵌入式ROOTFS transplantation
新聞資訊
NEWS INFORMATION

嵌入式ROOTFS transplantation

發(fā)布時(shí)間:2019-05-22

作一個(gè)嵌入式Linux rootfs,并且實(shí)現(xiàn) web 服務(wù)

1. 文件系統(tǒng)簡(jiǎn)介

•理論上說(shuō)一個(gè)嵌入式設(shè)備如果內(nèi)核能夠運(yùn)行起來(lái),且不需要運(yùn)行用戶進(jìn)程的話,是不需要文件系統(tǒng)的,文件系統(tǒng)簡(jiǎn)單的說(shuō)就是一種目錄結(jié)構(gòu),由于 linux操作系統(tǒng)的設(shè)備在系統(tǒng)中是以文件的形式存在,將這些文件進(jìn)行分類管理以及提供和內(nèi)核交互的接口,就形成一定的目錄結(jié)構(gòu)也就是文件系統(tǒng),文件系統(tǒng)是為用戶反映系統(tǒng)的一種形式,為用戶提供一個(gè)檢測(cè)控制系統(tǒng)的接口。
•根文件系統(tǒng),我認(rèn)為根文件系統(tǒng)就是一種特殊的文件系統(tǒng),那么根文件系統(tǒng)和普通的文件系統(tǒng)有什么區(qū)別呢?由于根文件系統(tǒng)是內(nèi)核啟動(dòng)時(shí)掛在的第一個(gè)文件系統(tǒng),那么根文件系統(tǒng)就要包括Linux啟動(dòng)時(shí)所必須的目錄和關(guān)鍵性的文件,例如Linux啟動(dòng)時(shí)都需要有init目錄下的相關(guān)文件,在 Linux掛載分區(qū)時(shí)Linux一定會(huì)找/etc/fstab這個(gè)掛載文件等,根文件系統(tǒng)中還包括了許多的應(yīng)用程序bin目錄等,任何包括這些Linux 系統(tǒng)啟動(dòng)所必須的文件都可以成為根文件系統(tǒng)。
Linux支持多種文件系統(tǒng),包括ext2、ext3、vfat、ntfs、iso9660、jffs、yaffs、romfs和nfs等,為了對(duì)各類文件系統(tǒng)進(jìn)行統(tǒng)一管理,Linux引入了虛擬文件系統(tǒng)VFS(Virtual File System),為各類文件系統(tǒng)提供一個(gè)統(tǒng)一的操作界面和應(yīng)用編程接口。
Linux啟動(dòng)時(shí),第一個(gè)必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設(shè)備上掛載根文件系統(tǒng),則系統(tǒng)會(huì)出錯(cuò)而退出啟動(dòng)。之后可以自動(dòng)或手動(dòng)掛載其他的文件系統(tǒng)。因此,一個(gè)系統(tǒng)中可以同時(shí)存在不同的文件系統(tǒng)。不同的文件系統(tǒng)類型有不同的特點(diǎn),因而根據(jù)存儲(chǔ)設(shè)備的硬件特性、系統(tǒng)需求等有不同的應(yīng)用場(chǎng)合。在嵌入式Linux應(yīng)用中,主要的存儲(chǔ)設(shè)備為 RAM(DRAM, SDRAM)和ROM(常采用FLASH存儲(chǔ)器),常用的基于存儲(chǔ)設(shè)備的文件系統(tǒng)類型包括:jffs2, yaffs, cramfs, romfs,ramdisk, ramfs/tmpfs等。
2.    基于FLASH的文件系統(tǒng) 
2.1 Cramfs:Compressed ROM File System
•它的速度快,效率高,其只讀的特點(diǎn)有利于保護(hù)文件系統(tǒng)免受破壞,提高了系統(tǒng)的可靠性。由于以上特性,Cramfs在嵌入式系統(tǒng)中應(yīng)用廣泛。但是它的只讀屬性同時(shí)又是它的一大缺陷,使得用戶無(wú)法對(duì)其內(nèi)容對(duì)進(jìn)擴(kuò)充。Cramfs映像通常是放在Flash中。
 
2.2 jffs2
Jffs2: 日志閃存文件系統(tǒng)版本2 (Journalling Flash FileSystem v2)

•主要用于NOR型閃存,基于MTD驅(qū)動(dòng)層,特點(diǎn)是:可讀寫的、支持?jǐn)?shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護(hù),提供“寫平衡”支持等。

•缺點(diǎn)主要是當(dāng)文件系統(tǒng)已滿或接近滿時(shí),因?yàn)槔占年P(guān)系而使jffs2的運(yùn)行速度大大放慢。jffs不適合用于NAND閃存主要是因?yàn)?span lang="EN-US">NAND閃存的容量一般較大,這樣導(dǎo)致jffs為維護(hù)日志節(jié)點(diǎn)所占用的內(nèi)存空間迅速增大,另外,jffs 文件系統(tǒng)在掛載時(shí)需要掃描整個(gè)FLASH的內(nèi)容,以找出所有的日志節(jié)點(diǎn),建立文件結(jié)構(gòu),對(duì)于大容量的NAND閃存會(huì)耗費(fèi)大量時(shí)間。

 

2.3.yaffs:Yet Another Flash File System 

 

yaffs/yaffs2是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能(例如不支持?jǐn)?shù)據(jù)壓縮),所以速度更快,掛載時(shí)間很短,對(duì)內(nèi)存的占用較小。另外,它還是跨平臺(tái)的文件系統(tǒng),除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。yaffs/yaffs2自帶NAND芯片的驅(qū)動(dòng),并且為嵌入式系統(tǒng)提供了直接訪問(wèn)文件系統(tǒng)的API,用戶可以不使用Linux中的MTD與 VFS,直接對(duì)文件系統(tǒng)操作。當(dāng)然,yaffs也可與MTD驅(qū)動(dòng)程序配合使用。
yaffs與yaffs2的主要區(qū)別在于,前者僅支持小頁(yè)(512 Bytes) NAND閃存,后者則可支持大頁(yè)(2KB) NAND閃存。同時(shí),yaffs2在內(nèi)存空間占用、垃圾回收速度、讀/寫速度等方面均有大幅提升。
 
2.4. 網(wǎng)絡(luò)文件系統(tǒng)NFS (Network File System)
NFS是由Sun開發(fā)并發(fā)展起來(lái)的一項(xiàng)在不同機(jī)器、不同操作系統(tǒng)之間通過(guò)網(wǎng)絡(luò)共享文件的技術(shù)。
•在嵌入式Linux系統(tǒng)的開發(fā)調(diào)試階段,可以利用該技術(shù)在主機(jī)上建立基于NFS的根文件系統(tǒng),掛載到嵌入式設(shè)備,可以很方便地修改根文件系統(tǒng)的內(nèi)容。
 
•所采用的工具:mkfs.cramfs,mkfs.jffs2,mkfs.yaffs
http://sourceforge.net/projects/cramfs/
http://sourceforge.net/projects/jffs2os/
http://sourceforge.net/projects/yaffs/
3.根文件系統(tǒng)的組成
目錄  內(nèi)容
Bin  :基本的可執(zhí)行文件
Opt  :添加的軟件包
Boot :啟動(dòng)時(shí)需要的一些文件
Proc :內(nèi)核及進(jìn)程信息的虛擬文件系統(tǒng)
Dev : 設(shè)備文件
 
Root:root用戶目錄
Etc: 系統(tǒng)配置文件
Sbin:系統(tǒng)管理的程序
Home : 用戶目錄
Tmp : 臨時(shí)文件
Lib : 庫(kù)文件
Usr : 應(yīng)用程序
Mnt : 掛載文件系統(tǒng)的掛載點(diǎn)
Var : 存放系統(tǒng)日志或一些服務(wù)程序的臨時(shí)文件
•根文件系統(tǒng)中的每一個(gè)頂級(jí)目錄都有特定的用途和目的 
•但并不是所有的目錄在嵌入式環(huán)境下都需要,
•我們只創(chuàng)建需要的一些目錄:
/bin /sbin /etc /proc /tmp /var /dev /mnt
Linux的根文件系統(tǒng)至少應(yīng)包括以下幾項(xiàng)內(nèi)容。
1.基本的文件系統(tǒng)結(jié)構(gòu),包含一些必需的目錄比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp等。
2.基本程序運(yùn)行所需的庫(kù)函數(shù),如Glibc/uClibc。
3.基本的系統(tǒng)配置文件,比如rc.sysinit,inittab等腳本文件。
4.必要的設(shè)備文件支持:/dev/hd*,/dev/tty*,/dev/fd0。
5.基本的應(yīng)用程序,如sh,ls,cp,mv等。
1.把全局配置文件放入/etc目錄下。
2.將設(shè)備文件信息放入/dev目錄下,設(shè)備名可以作為符號(hào)鏈接定位在/dev中或/dev子目錄中的其他設(shè)備存在。
3.操作系統(tǒng)核心定位在/或/boot,若操作系統(tǒng)核心不是作為文件系統(tǒng)的一個(gè)文件存在,不應(yīng)用它。
4.庫(kù)存放的目錄是/lib。
5.存放系統(tǒng)編譯后的可執(zhí)行文件、命令的目錄是/bin,/sbin,/usr。
 
4. 定制文件系統(tǒng) ,基于 ELDK,busybox
•安裝ELDK:
#mount –o loop arm-2008-11-24.iso /mnt
#/mnt/install –d /opt/eldk
#mkdir rootfs ;假定以下內(nèi)容都是在 rootfs 目錄下:
4.1自定義文件系統(tǒng)
•目錄bin
-------->用busybox編譯,下面說(shuō)明
•目錄sbin
-------->用busybox編譯,下面說(shuō)明
•目錄usr
-------->建立bin sbin兩個(gè)空目錄 
•目錄var
-------->建立log空目錄 
•目錄etc
------->可以把/opt /eldk/arm下或者s3c2410_recover
•的etc 拷貝過(guò)來(lái)修改,怎么修改下面說(shuō)明,需要包括:
inittab
rc.local -> rc.d/rc.local
rc.sysinit -> rc.d/rc.sysinit
目錄dev
------->這里不能直接從/opt/eldk/下 拷貝
•       應(yīng)當(dāng)如下制作否則系統(tǒng)啟動(dòng)是會(huì)說(shuō)明找不到設(shè)備文件console之類
•      cd /  rootfs/dev
      /mnt/ELDK_MAKEDEV  //ELDK_MAKEDEV從 ELDK ISO 文件里copy出來(lái)
•這樣在目錄dev 節(jié)點(diǎn)文件就出現(xiàn)了
•目錄lib
------->如果是采用靜態(tài)編譯,這里就空著;
•如果采用動(dòng)態(tài)編譯 ,
s3c2410_recover\lib
•或 /usr/local/arm/3.4.1/arm-linux/lib
•或/opt/eldk/arm/lib copy 過(guò)來(lái),再裁減lib 庫(kù)
•目錄 proc
------->空著但必須有這目錄
4.2.etc/下文件內(nèi)容修改
4.2.1 etc/rc.d/rc.sysinit
•這里你還可以按自己的要求修改
4.2.2 etc/rc.d/rc.local
•以后要啟動(dòng)的程序你可以加在這里
=============================================================
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
#touch /var/lock/subsys/local
=======================================
4.2.3 etc/inittab
init啟動(dòng)后會(huì)首先執(zhí)行這個(gè)文件
===========================================================•#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#

【1】文件系統(tǒng)

 掛載文件系統(tǒng)
  mount  -t     vfat                               /dev/mmcblk1p1    /mnt
  掛載         指定需要掛載的文件系統(tǒng)的類型       設(shè)備節(jié)點(diǎn)(文件)  掛載點(diǎn)(文件系統(tǒng)掛載到rootfs的地方)
  

【2】?jī)?nèi)核調(diào)試

 1)點(diǎn)燈是用 GPIO 作為輸出,觀察程序運(yùn)行階段和狀態(tài)的方法
 
 2)printk
   內(nèi)核解壓后
   信息輸出顯示是在 console 初始化之后


   printascii
   console初始化前


   printk打印級(jí)別:數(shù)字越低,級(jí)別越高
   
  1. #define KERN_EMERG "<0>" /* system is unusable */
  2.  #define LERT "<1>” /* action must be taken immediately */
  3.  #define KERN_CKERN_ARIT "<2>" /* critical conditions */
  4.  #define KERN_ERR "<3>" /* error conditions */
  5.  #define KERN_WARNING "<4>" /* warning conditions */
  6.  #define KERN_NOTICE "<5>" /* normal but significant condition */
  7.  #define KERN_INFO "<6>" /* informational */
  8.  #define KERN_DEBUG "<7>" /* debug-level messages




   ubuntu系統(tǒng):
   
   通過(guò)proc在運(yùn)行時(shí)查看和修改日志級(jí)別
   cat /proc/sys/kernel/printk
    4 4 1 7
    echo “7 4 1 7” >/proc/sys/kernel/printk
    cat /proc/sys/kernel/printk
    7 4 1 7
 3)OOPS
    pc寄存器保存內(nèi)核崩潰時(shí),運(yùn)行的地址

                                                       定位                  系統(tǒng)崩潰時(shí)的地址
linux@ubuntu:~/work/day_2/linux-3.14-fs4412$ arm-none-linux-gnueabi-addr2line 0xc0278e1c       
-e vmlinux               -f
指定定位鏡像文件     指定出錯(cuò)的文件以及行號(hào)
 
    dm9000_probe
    /home/linux/work/day_2/linux-3.14-fs4412/drivers/net/ethernet/davicom/dm9000.c:1414

4)調(diào)試信息
  調(diào)試信息一般顯示在兩個(gè)地方 :終端、log日志
 
  klogd進(jìn)程:執(zhí)行系統(tǒng)調(diào)用,去訪問(wèn)內(nèi)核的打印消息
  syslog進(jìn)程:記錄非內(nèi)核打印的消息
 
 
  void openlog(const char *ident, int option, int facility);
  功能:打開日志
  參數(shù):ident  日志的標(biāo)志
        option     LOG_PID        Include PID with each message.  打印的消息附加上進(jìn)程ID

                       LOG_CONS       Write directly to system console if there is an error while sending to system logger.
                                                  把消息顯示到log日志
        facility   表示的是消息出自于什么類型的進(jìn)程
        LOG_DAEMON     system daemons without separate facility value
        void syslog(int priority, const char *format, ...);
        功能:將消息顯示到日志中
        參數(shù):priority  級(jí)別
                         LOG_WARNING    warning conditio
                         LOG_NOTICE     normal, but significant, condition

                         LOG_INFO       informational message

                         LOG_DEBUG      debug-level message


  void closelog(void);
  功能:關(guān)閉日志
 
  查看日志消息: var/log/syslog日志
 

【3】文件系統(tǒng)

 文件系統(tǒng):文件存儲(chǔ)的格式
 文件系統(tǒng)的類型:
 磁盤文件系統(tǒng):駐留在磁盤上的文件系統(tǒng)
 FAT16、FAT32、NTFS、EXT2、EXT3、EXT4 
 網(wǎng)絡(luò)文件系統(tǒng):可以遠(yuǎn)程訪問(wèn)的文件系統(tǒng)
 nfs(network filesystem)
 內(nèi)存文件系統(tǒng):存在內(nèi)存上的文件系統(tǒng)
 tmpfs
 只讀文件系統(tǒng):
 cramfs
 
 根文件系統(tǒng)(root  filesystem)是存放運(yùn)行、維護(hù)系統(tǒng)所必須的各種工具軟件、庫(kù)文件、腳本、
            配置文件和其他特殊文件的地方,也可以安裝各種軟件包。


 根文件系統(tǒng)是內(nèi)核運(yùn)行之后,加載的第一個(gè)文件系統(tǒng),是其他文件系統(tǒng)的根,可用來(lái)掛載其他類型的文件系統(tǒng),也可視其為特殊的文件系統(tǒng)
 必須存在,不存在內(nèi)核無(wú)法運(yùn)行
  
 文件系統(tǒng)的目錄結(jié)構(gòu):
        /etc  存放內(nèi)核所需要的配置文件(啟動(dòng)文件)
====================================================================
        /bin: 普通用戶和root用戶都能執(zhí)行的基本程序
               ping, mknod, mount, tar, grep, gzip, etc
        /sbin: root用戶能執(zhí)行的基本程序
               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
        ====================================================================
        /proc  掛載proc文件系統(tǒng),記錄進(jìn)程的信息
/sys   掛載sysfs文件系統(tǒng),記錄內(nèi)核所需的特殊文件,設(shè)備,總線等信息
/mnt   臨時(shí)掛載點(diǎn),掛載其他文件系統(tǒng)使用
/tmp   臨時(shí)掛載點(diǎn),掛載其他文件系統(tǒng)使用
====================================================================
        /dev   設(shè)備節(jié)點(diǎn)(文件)


【4】根文件系統(tǒng)的制作

 1)make
    生成bin sbin usr/bin usr/sbin linuxrc

 2)mkdir  dev  etc  mnt  proc  var  tmp  sys  root 


 3)/etc
    inittab  fstab  init.d/rcS  profile 

inittab   
 |
 |
fstab
 |
 |
init.d ---- rcS
 |
 |
profile
 
    1)initab  內(nèi)核在加載rootfs的時(shí)候,解析該文件
  1.  ::sysinit:/etc/init.d/rcS 文件系統(tǒng)中運(yùn)行第一個(gè)腳本
  2.  :askfirst:-/bin/sh 指定腳本的類型
  3.  ::restart:/sbin/init 文件系統(tǒng)運(yùn)行的第一個(gè)進(jìn)程(sbin/init) init=/linuxrc 守護(hù)進(jìn)程
  4.  開啟當(dāng)前的shell環(huán)境,服務(wù)其他進(jìn)程,打開其他進(jìn)程
  5.  ::ctrlaltdel:/sbin/reboot reboot系統(tǒng)重啟


 
2)init.d/rcS
  1.  #!/bin/sh
  2.  # This is the first script called by init process
  3.  /bin/mount -a 執(zhí)行掛載,與之匹配的是fstab中設(shè)置好的掛載點(diǎn)
  4.  echo /sbin/mdev > /proc/sys/kernel/hotplug 生效熱插拔機(jī)制
  5.  /sbin/mdev -s




3)fstab  設(shè)置不同的文件系統(tǒng)的掛載點(diǎn)
      #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


    4)申明庫(kù)文件,以及進(jìn)程的路徑
     export HOSTNAME=farsight
     export USER=root


     PATH=/bin:/sbin:/usr/bin:/usr/sbin
     LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

新郑市| 镇赉县| 潼关县| 湄潭县| 额济纳旗| 庆元县| 天长市| 交城县| 正定县| 砚山县| 通渭县| 桂东县| 乾安县| 黄平县| 海口市| 石狮市| 西充县| 四川省| 侯马市| 鹤峰县| 西青区| 东山县| 西吉县| 北宁市| 河南省| 望城县| 洞口县| 资源县| 阜城县| 车致| 元阳县| 富川| 伊宁市| 武邑县| 武威市| 米易县| 海丰县| 花莲市| 武胜县| 寻乌县| 肥乡县|