IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育


嵌入式文件系統構建

分享到:
           

    Linux支持多種文件系統,同樣,嵌入式Linux也支持多種文件系統。雖然在嵌入式系統中,由于資源受限的原因,它的文件系統和PC上的Linux的文件系統有較大的區別,但是,它們的總體架構是一樣的,都是采用目錄樹的結構。在嵌入式系統中常見的文件系統有cramfs、romfs、jffs、yaffs等,這里就以制作cramfs文件系統為例進行講解。cramfs文件系統是一種經過壓縮的、極為簡單的只讀文件系統,因此非常適合嵌入式系統。要注意的是,不同的文件系統都有相應的制作工具,但是其主要的原理和制作方法是類似的。

    在嵌入式Linux中,busybox是構造文件系統常用的軟件工具包,它被非常形象地稱為嵌入式Linux系統中的“瑞士軍刀”,因為它將許多常用的Linux命令和工具結合到了一個單獨的可執行程序(busybox)中。雖然與相應的GNU工具比較,busybox所提供的功能和參數略少,但在比較小的系統(如啟動盤)或者嵌入式系統中已經足夠了。

    busybox在設計上就充分考慮了硬件資源受限的特殊工作環境。它采用一種很巧妙的辦法減少自己的體積:所有的命令都通過“插件”的方式集中到一個可執行文件中,在實際應用過程中通過不同的符號鏈接來確定到底要執行哪個操作。例如,終生成的可執行文件為busybox,當為它建立一個符號鏈接ls時,就可以通過執行這個新命令實現列出目錄的功能。采用單一執行文件的方式大限度地共享了程序代碼,甚至連文件頭、內存中的程序控制塊等其他系統資源都共享了,對于資源比較緊張的系統來說,真是合適不過了。在busybox的編譯過程中,可以非常方便地加減它的“插件”,后的符號鏈接也可以由編譯系統自動生成。

    下面用busybox構建FS2410開發板的cramfs文件系統。

    (1)從busybox網站下載busybox源碼(本實例采用busybox-1.00)并解壓,接下來,根據實際需要進行busybox的配置。

    $ tar jxvf busybox-1.00.tar.bz2
        $ cd busybox-1.00
        $ make defconfig /* 首先進行默認配置 */
        $ make menuconfig

    此時,需要設置與平臺相關的交叉編譯選項,操作步驟為:先選中“Build Options”項的“Do you want to build BusyBox with a Cross Complier?”選項,然后將“Cross Compiler prefix”設置為“/usr/local/arm/3.3.2/bin/arm-linux-”(這是在實驗主機中的交叉編譯器的安裝路徑),如圖1.7所示。

    
圖1.7 busybox配置畫面

    (2)編譯并安裝busybox。

    $ make
        $ make install PREFIX=/home/david/fs2410/cramfs

    其中,PREFIX用于指定安裝目錄,如果不設置該選項,則默認在當前目錄下創建_install目錄。創建的安裝目錄的內容如下:

    $ ls
    bin linuxrc sbin usr

    (3)由此可知,使用busybox軟件包所創建的文件系統還缺少很多東西。

    (4)通過創建系統所需的目錄和文件來完善文件系統的內容。

    $ mkdir mnt root var tmp proc boot etc lib
    $ mkdir /var/{lock,log,mail,run,spool}

    (5)將所需的交叉編譯鏈接庫復制到lib目錄中,這些庫文件位于/usr/local/arm/3.3.2/lib下。在復制時應該注意采用打包后解包的方式,以保證符號鏈接的正確性和完整性。刪除所有目錄和靜態庫文件,并使用arm-linux-strip工具剝除庫文件中的調試段信息,從而減少庫的體積。

    (6)創建一些重要文件。inittab是Linux啟動之后第一個被訪問的腳本文件。

    # This is run first except when booting
    ::sysinit:/etc/init.d/rcS

    # Start an "askfirst" shell on the console
    #::askfirst:-/bin/bash
    ::askfirst:/bin/bash

    # Stuff to do when restarting the init process
    ::restart:/sbin/init

    #::once:/sbin/raja.sh
    #::respawn:/sbin/iom
    ::once:/usr/etc/rc.local

    # Stuff to do before rebooting
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r

    建立init.d目錄,進入init.d目錄,建立rcS文件,文件內容如下:

    #!/bin/sh
    # This is the first script called by init process
    /bin/mount -a
    exec /usr/etc/rc.local

    建立/etc/profile文件:

    # /etc/profile
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
    export PATH LD_LIBRARY_PATH

    其中,profile用于設置shell的環境變量,shell啟動時會讀取/etc/profile文件來設置環境變量。以下是/etc/rc.local文件:

    #!/bin/sh
    #add user specified script
    cd /dev
    ln -s /dev/fb/0 fb0
    ln -s vc/0 tty0
    ln -s vc/1 tty1
    ln -s vc/2 tty2
    mknod –m 660 mtd0 c 90 0
    mknod –m 660 mtd1 c 90 2
    mknod –m 660 mtd2 c 90 4
    mknod –m 660 mtdblock0 b 31 0
    mknod –m 660 mtdblock1 b 31 1
    mknod –m 660 mtdblock2 b 31 2

    fstab文件定義了文件系統的各個“掛接點”,需要與實際的系統相配合。

    none         /proc           proc         defaults        0 0
    tmpfs        /dev/shm        tmpfs        defaults        0 0

    后要創建用戶和用戶組文件等其他文件,以上用busybox構造了文件系統的內容。

    下面創建cramfs文件系統映像文件,制作cramfs映像文件需要用到的工具是mkcramfs。此時可以采用兩種方法,一種方法是使用我們所構建的文件系統(在目錄“/home/david/fs2410/cramfs”中),另一種方法是在已經做好的cramfs映像文件的基礎上進行適當的改動。下面的示例使用第二種方法,因為這個方法包含了第一種方法的所有步驟(假設已經做好的映像文件名為“fs2410.cramfs”)。

    首先用mount命令將映像文件掛載到一個目錄下,打開該目錄并查看其內容。

    $ mkdir cramfs
    $ mount fs2410.cramgs cramfs –o loop
    $ ls cramfs
    bin dev etc home lib linuxrc proc Qtopia ramdisk sbin testshell tmp
    usr var

    因為cramfs文件系統是只讀的,所以不能在這個掛載目錄下直接進行修改,因此需要將文件系統中的內容復制到另一個目錄中,具體操作如下所示:

    $ mkdir backup_cramfs
    $ tar cvf backup.cramfs.tar cramfs/
    $ mv backup.cramfs.tar backup_cramfs/
    $ umount cramfs
    $ cd backup_cramfs
    $ tar xvf backup.cramfs.tar
    $ rm backup.cramfs.tar

    此時就像用busybox所構建的文件系統一樣,可以在backup_cramfs的cramfs子目錄中任意進行修改。例如,可以添加用戶自己的程序:

    $ cp ~/hello backup_cramfs/cramfs/

    在用戶的修改工作結束之后,用下面的命令可以創建cramfs映像文件:

    $ mkcramfs backup_cramfs/cramfs/ new.cramfs

    接下來,就可以將新創建的new.cramfs映像文件燒入到開發板的相應位置了。

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈接:

   1、Linux內核移植的簡介
   2、Linux內核配置與編譯
   3、Linux內核結構介紹
   4、Linux內核主要功能介紹
   5、在電路板上移植U-Boot程序

更多新聞>> 

主站蜘蛛池模板: 轴流消防排烟风机,排烟防火阀厂家,铝合金百叶风口-德州正邦通风设备有限公司 | 长春衡宇机械 食品干燥机 微波灭菌机 连续真空干燥机-干燥行业先进企业 | 山东凯达起重机械有限公司-单梁行车,龙门吊,提梁机,门式起重机,悬臂起重机 | 陕西锐锋建筑安装有限公司,锐锋建筑,总承包,专业分包,市政综合,劳务,水电钢构,铁路公路,房建,房屋建筑施工 | 中国焊接协会网站—中国焊接信息网;焊接行业最权威访问量最大的专业网站:焊接信息、焊接材料,焊接机器,焊接设备,焊机,焊材,辅助设备,焊机配件,仪器仪表,电动工具,钎焊,送丝机,表面处理,自动化专机,焊锡丝,助焊剂 | 无锡市恒威工业气体有限公司-工业高纯气体_高纯度特种气体 | 深圳车牌识别系统厂家_人脸识别厂家_通道闸厂家_车位引导系统_智慧社区管理系统_深圳市利普诺科技有限公司官网 | 铝合金热处理设备_天然气铝棒加热炉_QPQ热处理设备-浙江长兴天源炉业科技有限公司 | 桥梁伸缩缝_桥梁伸缩缝厂家_桥梁伸缩缝价格-衡水淞皓路桥养护工程有限公司 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 纸箱抗压测定仪|电脑测控耐破度仪|电脑抗张试验仪|杭州华翰仪器百科 | 南京企业宣传片制作,广告形象片,影视制作,宣传片拍摄,微电影拍摄制作公司 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 全自动|电加热配液罐,浓缩器厂家-森博百科| 上海画册设计-上海宣传册设计-产品手册设计-企业画册设计公司 | 衢州网站建设_网络公司_做网站_网站制作_网页设计-优骆网络 | 耐磨锤头|合金锤头|高铬耐磨锤头|破碎机锤头|双金属双液复合锤头_巩义东辰实业 合金耐磨锤头铸造厂 | 砂基透水砖滤水率,防滑性试验仪,砂基透水砖落球冲击,抗冲击试验机-献县中正试验仪器销售处 | 郑州邦达电气有限公司| 山东鲁控电力设备有限公司_高低压电器设备_变压器 | 重庆惠程信息科技股份有限公司| 滤布_PP滤芯_过滤芯_线绕滤芯_碳纤维滤芯 - 东莞市三比过滤器材有限公司 | 邛崃人才网_邛崃招聘网_求职找工作平台 | 上海机械网 机械 机械加工 金属加工 上海机械网 机械设备 上海机械 | 江西富兴节能建材有限公司| 专题秀_汇聚网络热门专题_实时报道各类新闻专题资讯 | 中科盛世酒窖 - 酒窖设计_酒窖工程_酒窖空调设备_恒温酒柜定制_私人别墅家庭酒窖_不锈钢红酒柜_实木雪茄柜 | 文轩热能_水冷板散热器热设计热管理系统_铝型材铲齿摩擦焊热管_散热片散热板生产加工厂家 | 深圳车牌识别系统厂家_人脸识别厂家_通道闸厂家_车位引导系统_智慧社区管理系统_深圳市利普诺科技有限公司官网 | 景德镇水流星陶瓷文化传播有限公司| 无锡防爆墙-无锡泄爆墙_江苏鑫立轩装饰工程有限公司 | 九江市东鸿气体有限公司| 烟囱防腐_维修_刷航标_美化_加固_刷色环| 松下PLC经销商-松下传感器-放大器-电磁阀-光电开关-金器[东莞均钛]品牌气动元件及工控产品一站式供应商 | 无锡市恒威工业气体有限公司-工业高纯气体_高纯度特种气体 | 弯箍机_钢筋弯箍机_全自动钢筋弯箍机_数控弯箍机-建科智能装备制造(天津)股份有限公司 | 拍照机,地铁自助拍证件照机器,校园自助打印机,智能自助复印机 | 家电|想认识品茶妹子?这份攻略手把手教你 | 威学一百-专注国际学校择校备考-DSE-A-level-雅思-托福-OSSD-港澳台联考-AP-IGCSE-IB-AMC-多邻国-PTE-SAT-SSAT-小语种(如日语,韩语,德语,法语,西班牙语,意大利语,俄语,泰语)等考试培训,为出国留学学生提供个性化定制性学习方案,线下实体面授+线上网络课程, 提供一对一,小班课等多种班型 | 喷涂陶瓷涂层_热喷涂陶瓷涂层-北京耐默公司 | 灭菌洗箱机_周转箱清洗机_隧道式洗箱机 - 环速科技有限公司 |