• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種構建嵌入式Linux根文件系統(tǒng)的方法

      2016-09-08 06:13:32劉二鋼
      電子設計工程 2016年9期
      關鍵詞:源碼內核命令

      劉二鋼

      (海南大學 信息科學技術學院,海南 ??凇?70228)

      一種構建嵌入式Linux根文件系統(tǒng)的方法

      劉二鋼

      (海南大學 信息科學技術學院,海南 ???70228)

      根文件系統(tǒng)是構建嵌入式Linux系統(tǒng)的非常重要的組成部分。文中主要以制作Yaffs2根文件系統(tǒng)為例,研究如何使用BusyBox構建嵌入式Linux的根文件系統(tǒng),包括BusyBox的配置、編譯和安裝,以及在嵌入式Linux環(huán)境下生成根文件系統(tǒng)映像文件的方法。文中所介紹的方法能夠成功地在ARM開發(fā)板中移植和運行,為嵌入式系統(tǒng)的開發(fā)提出了一種簡單易行的研究思路。

      BusyBox;Yaffs2;嵌入式Linux;文件系統(tǒng)

      在嵌入式系統(tǒng)中如果引入操作系統(tǒng),研發(fā)人員可以根據(jù)需求直接在操作系統(tǒng)基礎上設計開發(fā)而不必從頭開始。這樣會使研發(fā)工作變得簡單方便,因此帶操作系統(tǒng)的開發(fā)模式正逐步成為嵌入式系統(tǒng)開發(fā)的主流。Linux操作系統(tǒng)由于其開源穩(wěn)定,安全高效,一直是嵌入式操作系統(tǒng)的應用首選。應用Linux操作系統(tǒng),必須構建Linux根文件系統(tǒng)。但是大多數(shù)開發(fā)板所提供的構建Linux根文件系統(tǒng)的文獻資料都非常簡單,甚至未提及應用方法,許多用戶難以理解和掌握。本文就Linux根文件系統(tǒng)做了簡單介紹,并提出一種切實可行構建根文件系統(tǒng)的方法。

      1 Linux根文件系統(tǒng)簡介

      由于Linux嵌入式產(chǎn)品成本低廉,開發(fā)資源豐富,因此其越來越受到重視,應用也越來越廣泛。對于Linux操作系統(tǒng)來說,并沒有類似于WINDOWS中盤符的概念,而是將分區(qū)掛載到目錄上,被掛載的目錄就稱之為掛載點(mount point),然后通過目錄來訪問分區(qū)上的文件。常見的根文件系統(tǒng)都呈倒掛狀樹形層次結構,主要目錄及含義如圖1所示。

      圖1 根文件目錄結構

      對于操作系統(tǒng)而言,存儲在上面的文件和目錄必須遵循一定的格式,這種格式就稱之為文件系統(tǒng)類型,Linux操作系統(tǒng)常見的文件系統(tǒng)類型有 Ext2、Ext3、Jffs2、Cramfs、Yaffs、Yaffs2等。這些文件系統(tǒng)各有自己的特點,主要區(qū)別在于是否可寫、是否能夠壓縮及是否具有日志功能等。根文件系統(tǒng)是嵌入式Linux的重要組成部分,是內核啟動加載的第一個文件系統(tǒng),并為內核的啟動提供各種工具軟件、庫文件、腳本和配置文件,而且可以作為數(shù)據(jù)的存取區(qū)域,是決定系統(tǒng)能否正常啟動的關鍵[1]。

      制作根文件系統(tǒng)就是生成上述各種文件目錄的過程。常見的制作根文件系統(tǒng)的方法是利用工具BusyBox制作根文件系統(tǒng),用這種方法制作根文件系統(tǒng)可以做到短小精悍且效率較高。文中主要以制作Yaffs2根文件系統(tǒng)為例,論述利用BusyBox工具制作根文件系統(tǒng)的整個過程。系統(tǒng)宿主機是PC機,操作系統(tǒng)是Ubuntu10.04,目標板是基于ARM9-S3C2440微控制器的開發(fā)板,內核是Linux2.6.30.4,Bootloader是U-boot。

      2 BusyBox簡介

      BusyBox是一個集成多個Linux命令和工具的軟件,具有實用穩(wěn)定、短小精悍等特點,因此BusyBox常常被稱作“The Swiss Army Knife of Embedded Linux”[2]。它將許多常用的Unix命令和工具集合到一個單獨的可執(zhí)行程序中,雖然與相應的GUN工具比較,其所提供的功能和參數(shù)略少,但在比較小的嵌入式系統(tǒng)中已經(jīng)夠用[3]。BusyBox利用Linux實用工具中代碼大量重復的事實,將重復的代碼重新整理放到一個文件中,減少了多次包含,這樣就可以節(jié)省系統(tǒng)的空間并提高程序的執(zhí)行速度[4]。

      3 BusyBox編譯和安裝

      首先要到其官方網(wǎng)站 http://www.busybox.net/downloads/下載BusyBox源碼,本文下載的版本為BusyBox-1.13.0.tar. bz2,下載后將其解壓,隨后修改頂層目錄下的MakeFile文件。由于硬件環(huán)境是ARM平臺,需要修改編譯工具和系統(tǒng)架構為:

      CROSS_COMPILE=arm-linux-

      ARCH=arn

      下面進行菜單配置,在終端中輸入make menuconfig,選擇需要添加的命令和文件。一般保留默認配置即可,這里不再詳細論述。

      設定好配置菜單并保存退出后就可以進行BusyBox的安裝了。在安裝之前首先設定安裝目錄,這里假設安裝在/ home/rootbox下。創(chuàng)建目錄rootbox,然后安裝BusyBox到此目錄下。具體命令如下:

      sudo mkdir/home/rootbox/*建立目錄rootbox*/

      cd~/busybox-1.13.0/*進入到BusyBox目錄*/

      make

      make CONFIG PREFIX=/home/rootbox install/*安裝到rootbox目錄*/

      編譯結束后會在rootbox目錄下面生成構建根文件系統(tǒng)所需要的一些文件和目錄,分別為bin目錄、sbin目錄、usr目錄以及l(fā)inuxrc文件。如果沒有指定路徑,則會在BusyBox目錄下生成_install目錄并包含上述目錄和文件。雖然產(chǎn)生的文件并不是很多,但大部分都是經(jīng)常用到的一些命令,這也正體現(xiàn)出BusyBox的短小精悍。

      通過這個步驟,已經(jīng)實現(xiàn)了BusyBox的安裝,從而完成了最基本的Linux文件框架,下面開始制作根文件系統(tǒng)。

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

      進入目錄rootbox,在此路徑下繼續(xù)建立所需的dev,etc, home,lib,mnt,proc,root,sys,tmp,bin,opt,web,udisk,sddisk,var等目錄。

      4.1創(chuàng)建etc目錄下的文件

      系統(tǒng)所需的配置文件存放于/home/rootbox/etc這個目錄。配置文件主要依賴于系統(tǒng)中所擁有的應用程序以及這些程序的配置方式。文中主要創(chuàng)建了inittab、init.d/rcS和fstab文件。

      4.1.1創(chuàng)建etc/inittab文件

      init最主要的功能就是準備軟件執(zhí)行的環(huán)境,包括系統(tǒng)的主機名、網(wǎng)絡設置、語系處理、文件系統(tǒng)格式及其他服務的啟動等[5],而這些操作主要是根據(jù)/etc/inittab這個配置文件進行規(guī)劃的。

      在BusyBox源碼下面存在一個 “examples/inittab”文件,可以參考這個文件內容設定inittab代碼:

      #/etc/inittab

      ::sysint:/etc/init.d/rcs/*定系統(tǒng)啟動的腳本*/

      ::respawn:-/bin/sh/*打開一個登錄會話*/

      S3C2440_seria10:askfirst:-/bin/sh/*指定打開一個無需登陸驗證的*/

      shell,以s3c2440_seria10作為控制臺*/

      ::ctrlaltdel:/sbin/reboot/*指定當按下ctrl+alt+del時執(zhí)行命令*/

      ::shutdown:/bin/umount-a-r/*關機時執(zhí)行的操作*/

      4.1.2創(chuàng)建etc/init.d/rcS文件

      這個文件是一個腳本文件,主要作用是添加可以自動運行的程序及其執(zhí)行權限。文中添加的命令是配置IP地址以及掛接下面4.1.3所述/etc/fstab指定的文件系統(tǒng),也可根據(jù)需要添加其它命令。命令內容如下:

      #!/bin/sh

      ifconfig eth0 192.168.1.10

      mount-a

      chmod+x etc/init.d/rcs

      4.1.3創(chuàng)建etc/fstab文件

      Linux將硬盤,分區(qū)及可移動磁盤等設備都作為一種文件目錄進行管理,etc/fstab文件就是專門用來配置這些文件目錄進行自動掛載的過程,相當于將mount掛載過程變?yōu)樽詣訄?zhí)行。因此fstab對于文件系統(tǒng)來說非常重要,是Linux系統(tǒng)開機自動引導掛載時所依賴的唯一配置標準。文中創(chuàng)建代碼如下:

      #devicemount-pointtypeoptionsdump fsck order

      proc/procprocdefaults 00

      tmpfs/tmptmpfs defaults 00

      sysfs/syssysfsdefaults 00

      tmpfs/devtmpfs defaults 00

      文件中各字段的含義表示如下:

      1)device:掛接設備文件名或設備 Label,比如/dev/ mtdblock1;

      2)mount-point:掛載點;

      3)type:掛載文件系統(tǒng)類型;

      4)options:文件系統(tǒng)參數(shù),如只讀、可執(zhí)行等,中間以逗號隔開;

      5)dump和fsck order:控制dump備份與fsck扇區(qū)檢驗。

      4.2構建dev目錄

      從Linux-2.6.12內核開始,設備管理系統(tǒng)的devfs選項已經(jīng)從內核配置中刪除[6]。新版本的udev是一個應用層的管理文件,已經(jīng)不再屬于內核,在內核啟動時并不能自動創(chuàng)建設備節(jié)點,必須進行手動創(chuàng)建。這里主要需要兩個設備,一個是用于終端連接的console控制臺,另一個則是用于處理垃圾文件的null。可以采用變通的辦法,利用BusyBox中內置的mdev文件生成一個簡化的udev版本。

      s mknod dev/console c 5 1

      s mknod dev/nullc 1 3

      如果上述操作沒有執(zhí)行,文件系統(tǒng)在啟動時將不能夠連接控制臺,從而出現(xiàn)錯誤信息。

      4.3安裝glibc庫

      在嵌入式目標板上還需動態(tài)庫和加載器,因此執(zhí)行命令如下:

      scd/hone/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib scp*.so*/home/rootbox/lib

      5 在Linux內核中添加對于Yaffs2文件系統(tǒng)的支持

      由于文件系統(tǒng)的啟動依賴于嵌入式Linux系統(tǒng)內核,因此必須要在Linux系統(tǒng)內核中添加對于文件系統(tǒng)的支持。

      首先需要下載Yaffs文件系統(tǒng)補丁cvs-root.tar.gz,讀者可以在網(wǎng)上搜索下載。下載之后將其解壓,并將這個補丁打在Linux系統(tǒng)內核目錄中,具體命令如下:

      star xvfx cvx-root.tar.gz

      scd cvs/yaffs2/

      s./patch-ker.shc/home/linux-2.6.30.4/

      執(zhí)行之后就會在Linux內核的“fs/”目錄下面看到新添加了一個名為 “yaffs2/”的目錄,同時在“fs/”目錄下面的“Makefile”文件和“Kconfig”文件也添加了 yaffs2的配置和編譯條件。然后編譯配置內核,在內核中添加硬件ECC校驗和YAFFS文件系統(tǒng)的選項,否則yaffs2文件系統(tǒng)可能會掛載不成功。

      6 制作文件系統(tǒng)映像

      下面就可以制作文件系統(tǒng)映像了。在http://www.yaffs.net/可以得到y(tǒng)affs文件系統(tǒng)的源碼壓縮包,在yaffs源碼中可以找 到 utils目 錄 ,里 面 包 含 Makefile、mkyaffsimage和mkyaffs2image三個文件。其中mkyaffsimage和mkyaffs2image這兩個文件主要是用來做系統(tǒng)映像,二者的區(qū)別是前者用來制作yaffs文件映像,后者用來制作yaffs2文件映像[7]。另外再加入兩個文件:nand-ecc.c和yaffs_packedtags1.c,具體文件這里不列出,源碼可參見文獻[8]。

      因為yaffs_packedtags1.c和nand-ecc.c文件是后加上去的,可以增加制作好的文件系統(tǒng)支持大容量磁盤等功能,但是這樣文件數(shù)目及內容發(fā)生了變化,必須修改Makefile文件 。在 MKYAFFS2SOURCES=mkyaffs2image.c后 面 加yaffs_packedtags1.c nand-ecc.c,將這兩個文件也載入系統(tǒng)映像。然后執(zhí)行make命令后重新生成mkyaffs2image工具,復制此工具到PC機usr/local/bin目錄下,利用makyaffs2image工具執(zhí)行命令:

      scd/home

      smkyaffsimage2 rootbox rootbox.bin

      之后就可以生成文件系統(tǒng)映像文件名稱為rootbox.bin。至此,整個根文件系統(tǒng)就制作完成。

      7 燒寫文件系統(tǒng)映像

      最后需要完成的是將制作好的Linux內核映像和根文件系統(tǒng)映像下載到目標開發(fā)板,本文中使用的是基于S3C2440微處理器的開發(fā)板,這個步驟可以借助于Windows提供的超級終端工具進行下載。

      #tftp 30008000 zImage.bin/*下載Linux內核映像到目標板內存*/

      #tftp 30800000 rootbox.bin/*下載根文件系統(tǒng)映像到目標板內存*/

      #go30008000/*啟動目標板Linux*/

      下載成功后在超級終端中顯示的結果如圖2所示,可見系統(tǒng)已經(jīng)正常啟動,從而成功生成了根文件系統(tǒng)所必須的文件目錄結構。

      圖2 根文件運行結果

      8 結束語

      根文件系統(tǒng)是Linux嵌入式系統(tǒng)中重要的部分,好的文件系統(tǒng)可以更好的利用軟硬件資源,提高系統(tǒng)性能。Linux嵌入式文件系統(tǒng)種類多樣,在選取時需要根據(jù)系統(tǒng)的Flash容量、SDRAM大小以及對文件系統(tǒng)讀寫的需求而定。文中通過對文件系統(tǒng)的制作以及移植的闡述,為Linux嵌入式研究者提供了一種借鑒方法。

      [1]陳海燕,任松巖.嵌入式Linux根文件系統(tǒng)的研究[J].現(xiàn)代電子技術,2010(4):73-75.

      [2]Erik Andersen.BusyBox:The Swiss Army Knife of Embedded Linux[EB/OL].(2008)[2014-12-11],http://www.busybox.net/about.html.

      [3]陳峰,李濱滔,戈志華.基于S3C2410的嵌入式Linux系統(tǒng)構建[J].現(xiàn)代電子技術,2007(24):55-57.

      [4]陳立定,楊俊輝,陳偉欣.使用Busybox制作Cramfs根文件系統(tǒng)[J].計算機技術與發(fā)展,2009(4):146-148,153.

      [5]鳥哥.鳥哥的linux私房菜-基礎學習篇(第三版)[M].北京:人民郵電出版社,2010.

      [6]王磊,謝維波.AdHoc網(wǎng)絡在嵌入式Linux上的實現(xiàn)[J].華僑大學學報自然科學版,2011(3):161-164.

      [7]龍亞春,黃璞,吳勝.超大容量NAND Flash文件系統(tǒng)-YAFFS2 在Linux下的實現(xiàn) [J].北京電子科技學院學報,2007,15(2):81-84.

      [8]小龍.利用BusyBox做yaffs根文件系統(tǒng) [EB/OL].(2009-01)[2014-12-11],http://blog.mcuol.com/User/longren/Article/9633_1. htm.

      A method of building embedded Linux root file system

      LIU Er-gang
      (College of Information Science&Technology,Hainan University,Haikou 570228,China)

      The root file system is a very important part of building the embedded Linux system.This paper mainly makes Yaffs2 root file system as an example of studying how to use the BusyBox to build embedded Linux root file system,including the BusyBox configuration,compilation and installation,and generates the system image files of root file in the embedded Linux environment.The method introduced in the paper is able to transplant and run successfully in the ARM development board,and puts forward a kind of feasible research ideas for the development of embedded system.

      BusyBox;Yaffs2;Embedded Linux;file system

      TN99

      A

      1674-6236(2016)09-0160-03

      2015-05-29稿件編號:201505255

      海南省自然科學基金資助項目(614225)

      劉二鋼(1980—),男,山西長治人,碩士研究生,講師。研究方向:嵌入式系統(tǒng)、圖像處理。

      猜你喜歡
      源碼內核命令
      基于網(wǎng)頁源碼結構理解的自適應爬蟲代碼生成方法
      計算機應用(2023年6期)2023-07-03 14:11:56
      基于圖神經(jīng)網(wǎng)絡的軟件源碼漏洞檢測方法
      計算機時代(2023年6期)2023-06-15 17:49:09
      萬物皆可IP的時代,我們當夯實的IP內核是什么?
      只聽主人的命令
      強化『高新』內核 打造農業(yè)『硅谷』
      企業(yè)如何保護源碼
      基于嵌入式Linux內核的自恢復設計
      Linux內核mmap保護機制研究
      移防命令下達后
      基于數(shù)據(jù)結構教輔系統(tǒng)的實驗課程改革
      計算機教育(2016年4期)2016-05-20 02:36:05
      新安县| 定南县| 东宁县| 平塘县| 大兴区| 铁岭县| 永城市| 仁布县| 仲巴县| 兰西县| 正镶白旗| 枣庄市| 金华市| 勃利县| 友谊县| 那曲县| 武清区| 岳西县| 益阳市| 福贡县| 乌兰县| 大悟县| 康乐县| 探索| 鱼台县| 曲靖市| 京山县| 武邑县| 凯里市| 镇原县| 临沭县| 昆山市| 墨脱县| 潜山县| 岫岩| 象山县| 革吉县| 汽车| 辉县市| 铜山县| 晋宁县|