久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 制作Ramdisk文件系統(tǒng)

制作Ramdisk文件系統(tǒng)

來(lái)源:千鋒教育
發(fā)布人:wjy
時(shí)間: 2022-12-28 11:51:09 1672199469

  制作根文件系統(tǒng)需要有如下目錄:/dev、/bin、/usr、/sbin、/lib、/etc、/proc 和/sys。下面分別簡(jiǎn)單介紹各個(gè)目錄中存放的文件。

  (1)/dev 目錄下存放的是設(shè)備文件,用于訪問(wèn)系統(tǒng)資源或設(shè)備,如串口、U 盤、硬盤、系統(tǒng)內(nèi)存等。在 Linux 中所有的設(shè)備都被抽象成了文件,用戶訪問(wèn)設(shè)備就像訪問(wèn)普通文件一樣。在/dev 目錄下,每個(gè)文件可用 mknod 建立。/dev 目錄下主要的設(shè)備文件包括以下幾個(gè)。

制作 Ramdisk 文件系統(tǒng)216

  (2)/bin、/usr/bin、/usr/sbin、/sbin 存放的是二進(jìn)制可執(zhí)行文件,這部分內(nèi)容通常通過(guò)編譯 busybox 獲得。

  (3)/lib 用于存放動(dòng)態(tài)鏈接庫(kù)。

  (4)/etc 是用來(lái)存放初始化腳本和其他配置文件的。啟動(dòng)腳本位于/etc/rc.d/init.d 中,系統(tǒng)最先運(yùn)行的服務(wù)是那些放在/etc/rc.d 目錄下的文件,運(yùn)行級(jí)別在文件/etc/inittab 中指定。

  (5)/proc 是用來(lái)掛載存放系統(tǒng)信息虛擬文件的系統(tǒng),不保存在系統(tǒng)硬盤中,是內(nèi)存映射。它包含一些和系統(tǒng)相關(guān)的信息,如 CPU 的信息。

  (6)/sys 該目錄下安裝了 2.6 內(nèi)核中新出現(xiàn)的 sysfs 文件系統(tǒng),sysfs 集成了 3 種文件系統(tǒng)的信息:針對(duì)進(jìn)程信息的 proc 文件系統(tǒng)、針對(duì)設(shè)備的 devfs 文件系統(tǒng)及針對(duì)偽終端的devpts 文件系統(tǒng)。sysfs 是內(nèi)核設(shè)備樹的一個(gè)直觀反映。當(dāng)一個(gè)內(nèi)核對(duì)象被創(chuàng)建時(shí),會(huì)在內(nèi)核對(duì)象子系統(tǒng)中創(chuàng)建對(duì)應(yīng)的文件和目錄。

  下面將詳細(xì)介紹 Ramdisk 的制作過(guò)程。

  1.建立根文件目錄

  前面提到過(guò)根文件目錄主要包括/dev、/bin、/usr、/sbin、/lib、/etc、/proc、/sys、/var

  和/tmp。下面給出建立根文件目錄的命令:

  #cd /usr/local

  #mkdir rootfs

  #cd rootfs

  #mkdir bin dev etc lib proc sbin tmp usr var sys

  #chmod 777 tmp

  #mkdir usr/bin usr/lib usr/sbin

  #mkdir var/lib var/lock var/log var/run var/tmp

  #chmod 777 var/tmp

  2.編譯Busybox

  編譯 Busybox 可以得到絕大多數(shù)目錄和工具,可以簡(jiǎn)化設(shè)計(jì)和開發(fā)時(shí)間。在下載和使 用 busybox 時(shí),注意要使用穩(wěn)定版本(stable)。例如,Busybox 1.21.1 是穩(wěn)定版本,而 Busybox 1.21.0 是非穩(wěn)定版本,建議讀者在初學(xué)時(shí)使用穩(wěn)定版本。編譯 Busybox 前必須對(duì)需要的工具進(jìn)行配置,通過(guò)圖形界面選擇工具,選擇的原則是 盡量選擇必要的工具。下面是解壓和進(jìn)入配置界面命令:

  #tar jxvf busybox-1.21.1.tar.bz2

  #cd busybox-1.21.1

  #make menuconfig

  (1)進(jìn)入配置界面后,依次選擇 Busybox Settings-->Build Options--->,在該窗口中設(shè)置將 Busybox 編譯成靜態(tài)庫(kù),選擇交叉編譯器,

制作 Ramdisk 文件系統(tǒng)1367

  (2)配置安裝選項(xiàng),依次選擇 Busybox Settings-->Installation Options--->,進(jìn)入 Installation Options 窗口后設(shè)置 busybox 的安裝目錄為/usr/local/rootfs,即前面創(chuàng)建的根文件 目錄,

制作 Ramdisk 文件系統(tǒng)1508

  (3)配置關(guān)于檔案工具選項(xiàng)(Archival Utilities),該窗口中有常用的壓縮(bzip2)、 解壓(bunzip2)和安裝軟件包工具(rpm)等??梢赃x擇常用的工具,也可以按照默認(rèn)的 選擇進(jìn)行配置,

制作 Ramdisk 文件系統(tǒng)1620

  (4)配置核心工具選項(xiàng)(Coreutils),該窗口中包括打印日歷(cal)、修改權(quán)限(chmod)、 復(fù)制(cp)、移動(dòng)文件(mv)等,可以選擇常用的工具,也可以按照默認(rèn)的選擇進(jìn)行配置,

制作 Ramdisk 文件系統(tǒng)1722

  (5)配置控制臺(tái)工具(Console Utilities),該窗口中的工具在實(shí)際中用的比較少,常用的有清除控制臺(tái)(clear)、重置(reset)控制臺(tái)等,可以根據(jù)需要選擇

制作 Ramdisk 文件系統(tǒng)1815

  (6)Debian Utilities 和 Mail Utilities,這兩項(xiàng)工具在嵌入式系統(tǒng)中基本沒(méi)有用到,可以不用配置這兩個(gè)選項(xiàng)。

  (7)配置 Editors 時(shí),可以只選 VI 和 diff 工具。

  (8)必須配置初始化工具(Init Utilities),并且在該窗口中一定要選擇 Support reading an inittab file,支持 init 讀取/etc/inittab 配置文件,

制作 Ramdisk 文件系統(tǒng)2030

  (9)必須配置網(wǎng)絡(luò)工具(Networking Utilities),要與開發(fā)板進(jìn)行通信,或者上傳文件 到開發(fā)板上時(shí),需要通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸。因此,需要設(shè)置 IP 工具(ifconfig)、文件傳輸 工具(FTP)等,可以不用支持 IPv6、ARP 等工具

制作 Ramdisk 文件系統(tǒng)2163

  (10)必須配置 Shell 工具,選擇命令 Shell 進(jìn)入 Shell 窗口,選擇 ash,

制作 Ramdisk 文件系統(tǒng)2218

  (11)保存配置,選擇 Save Configuration to an Alternate File,退出配置窗口后執(zhí)行下 面的命令進(jìn)行編譯安裝busybox 到/usr/local/rootfs 目錄下

  #make install

  3.將交叉編譯器庫(kù)復(fù)制到 rootfs/lib下

  (1)將交叉編譯器目錄下庫(kù)文件復(fù)制到 rootfs/lib 中時(shí),注意查看所復(fù)制的目錄下是否 有 libm、libpthread 等常用庫(kù)。進(jìn)入/usr/local/arm/4.4.3/arm-none-linux-gnueabi/libc/lib 下, 查看目錄下的庫(kù)文件,是否存在需要的庫(kù)文件。

  #cd /usr/local/arm/4.4.3/arm-none-linux-gnueabi/libc/lib

  #ls

  ld-2.9.so libmudflap.a libresolv-2.9.so

  ld-linux.so.3 libmudflap.la libresolv.so.2

  libanl-2.9.so libmudflap.so librt-2.9.so

  libanl.so.1 libmudflap.so.0 librt.so.1

  libBrokenLocale-2.9.so libmudflap.so.0.0.0 libSegFault.so

  libBrokenLocale.so.1 libmudflapth.a libssp.a

  libc-2.9.so libmudflapth.la libssp.la

  libcrypt-2.9.so libmudflapth.so libssp_nonshared.a

  libcrypt.so.1 libmudflapth.so.0 libssp_nonshared.la

  libc.so.6 libmudflapth.so.0.0.0 libssp.so

  libdl-2.9.so libnsl-2.9.so libssp.so.0

  libdl.so.2 libnsl.so.1 libssp.so.0.0.0

  libgcc_s.so libnss_compat-2.9.so libstdc++.a

  libgcc_s.so.1 libnss_compat.so.2 libstdc++.la

  libgomp.a libnss_dns-2.9.so libstdc++_pic.a

  libgomp.la libnss_dns.so.2 libstdc++.so

  libgomp.so libnss_files-2.9.so libstdc++.so.6

  libgomp.so.1 libnss_files.so.2 libstdc++.so.6.0.13

  libgomp.so.1.0.0 libnss_hesiod-2.9.so libsupc++.a

  libgomp.spec libnss_hesiod.so.2 libsupc++.la

  libiberty.a libnss_nis-2.9.so libthread_db-1.0.so

  libid3tag.so libnss_nisplus-2.9.so libthread_db.so.1

  libid3tag.so.0 libnss_nisplus.so.2 libts-0.0.so.0

  libid3tag.so.0.3.0 libnss_nis.so.2 libts-0.0.so.0.1.1

  libjpeg.so libpcprofile.so libts.so

  libjpeg.so.62 libpng12.so libutil-2.9.so

  libjpeg.so.62.0.0 libpng12.so.0 libutil.so.1

  libm-2.9.so libpng12.so.0.35.0 libuuid.so

  libmad.so libpng.so libuuid.so.1

  libmad.so.0 libpng.so.3 libuuid.so.1.2

  libmad.so.0.2.1 libpng.so.3.35.0 libz.a

  libmemusage.so libpthread-2.9.so

  libm.so.6 libpthread.so.0

  (2)執(zhí)行庫(kù)文件的復(fù)制過(guò)程。復(fù)制完成后進(jìn)入/usr/local/rootfs/lib 查看是否復(fù)制了需要的庫(kù)文件。

  #cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib

  #for file in libc libcrypt libdl libm libpthread libresolv libutil

  >do

  >cp $file-*.so /usr/local/rootfs/lib

  >cp -d $file.so.[*0-9] /usr/local/rootfs/lib

  >done

  #cp -d ld*.so* /usr/local/rootfs/lib

  #cd /usr/local/rootfs/lib

  #ls

  ld-2.9.so libcrypt.so.1 libm-2.9.so libresolv-2.9.so

  ld-linux.so.3 libc.so.6 libm.so.6 libresolv.so.2

  libc-2.9.so libdl-2.9.so libpthread-2.9.so libutil-2.9.so

  libcrypt-2.9.so libdl.so.2 libpthread.so.0 libutil.so.1

  4.建立所需設(shè)備文件

  需要的設(shè)備文件結(jié)點(diǎn)包括控制臺(tái) console、內(nèi)存 mem 等。建立各個(gè)設(shè)備結(jié)點(diǎn)的參數(shù)包括設(shè)備類型、主設(shè)備號(hào)和次設(shè)備號(hào)。建立結(jié)點(diǎn)命令如下:

  # cd /usr/local/rootfs/dev

  # mknod console c 5 1

  # mknod full c 1 7

  # mknod kmem c 1 2

  # mknod mem c 1 1

  # mknod null c 1 3

  # mknod port c 1 4

  # mknod random c 1 8

  # mknod urandom c 1 9

  # mknod zero c 1 5

  # for i in `seq 0 7`; do mknod loop$i b 7 $i; done

  # for i in `seq 0 9`; do mknod ram$i b 1 $i; done

  # ln -s ram1 ram

  # mknod tty c 5 0

  # for i in `seq 0 9`; do mknod tty$i c 4 $i; done

  # for i in `seq 0 9`; do mknod vcs$i b 7 $i; done

  # ln -s vcs0 vcs

  # for i in `seq 0 9`; do mknod vcsa$i b 7 $i; done

  # ln -s vcsa0 vcsa

  注意:符號(hào)` `并非鍵盤上的單引號(hào),而是鍵盤左上方的波浪號(hào)對(duì)應(yīng)的鍵。建立完成后可以查看在/usr/local/rootfs/dev 目錄下建立的設(shè)備結(jié)點(diǎn)有:

  console loop3 null ram3 ram9 tty3 tty9 vcs3 vcs9 vcsa4 zero

  full loop4 port ram4 random tty4 urandom vcs4 vcsa vcsa5

  kmem loop5 ram ram5 tty tty5 vcs vcs5 vcsa0 vcsa6

  loop0 loop6 ram0 ram6 tty0 tty6 vcs0 vcs6 vcsa1 vcsa7

  loop1 loop7 ram1 ram7 tty1 tty7 vcs1 vcs7 vcsa2 vcsa8

  loop2 mem ram2 ram8 tty2 tty8 vcs2 vcs8 vcsa3 vcsa9

  5.建立文件系統(tǒng)映像文件

  準(zhǔn)備目標(biāo)系統(tǒng)啟動(dòng)所需要的文件 rcS、inittab 和 fstab。這 3 個(gè)文件是制作文件系統(tǒng)最

  重要的文件。下面給出各個(gè)文件的內(nèi)容。

  (1)/etc/init.d/rcS:掛載/etc/fstab 指定的文件系統(tǒng)。

  #! /bin/sh

  /bin/mount –a

  (2)/etc/inittab:init 進(jìn)程的配置文件。

  ::sysinit:/etc/init.d/rcS

  ::askfirst:-/bin/bash

  ::restart:/sbin/init

  ::ctrlaltdel:/sbin/reboot

  ::shutdown:/bin/umount –a –r

  (3)/etc/fstab:指定需要掛載的文件系統(tǒng)。

  proc /proc proc defaults 0 0

  tmpfs /tmp tmpfs defaults 0 0

  sysfs /sys sysfs defaults 0 0

  tmpfs /dev tmpfs defaults 0 0

  var /dev tmpfs defaults 0 0

  6.建立文件系統(tǒng)映像文件

  建立根文件系統(tǒng)掛載點(diǎn):

  # mkdir /mnt/ramdisk

  建立大小為 8192 的根文件系統(tǒng):

  # mke2fs -vm0 /dev/ram 8192

  細(xì)節(jié)中打印的細(xì)節(jié)信息中包括塊的個(gè)數(shù)、塊的大小、結(jié)點(diǎn)個(gè)數(shù)等信息。

  mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 2048 inodes, 2048 blocks 0 blocks (0.00%) reserved for the super user First data block=0 1 block group 32768 blocks per group, 32768 fragments per group 2048 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.

  掛載根文件系統(tǒng):

  # mount -t ext2 /dev/ram /mnt/ramdisk

  對(duì)文件系統(tǒng)進(jìn)行操作,將制作的文件系統(tǒng)復(fù)制到掛載點(diǎn):

  # cp -af /usr/local/rootfs/* /mnt/ramdisk

  退出/mnt/ramdisk 目錄才能進(jìn)行卸載:

  # cd /

  卸載文件:

  # umount /mnt/ramdisk

  文件系統(tǒng)生成:

  # dd if=/dev/ram of=ramdisk bs=1k count=8192

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

  # gzip -v9 ramdisk

  生成的映像文件為 ramdisk,壓縮后為 ramdisk.gz。

  7.內(nèi)核中支持RAM文件系統(tǒng)的初始化

  在編譯內(nèi)核時(shí),在 General setup 窗口中選擇[*] Initial RAM filesystem and RAM disk

  (initramfs/initrd) support ,同時(shí)在 Initramfs source 中傳遞初始化參數(shù):

  initrd=0x21100000,8000000 root=/dev/ram rw init=linuxrc console=ttyS0, 115200, mem=32M

制作 Ramdisk 文件系統(tǒng)7424

  本文摘自《linux系統(tǒng)移植(第2版)》,文章僅供于學(xué)習(xí)交流。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
為什么SpringBoot的 jar 可以直接運(yùn)行?

一、JAR文件的結(jié)構(gòu)與執(zhí)行方式Spring Boot的JAR包是Java Archive的縮寫,它是一種壓縮文件格式,可以將Java項(xiàng)目的類文件、資源文件以及依賴庫(kù)等...詳情>>

2023-10-14 23:01:49
站群服務(wù)器是什么?

站群服務(wù)器的含義與用途站群服務(wù)器主要用于支持站群,即由一組相互鏈接的網(wǎng)站組成的群體。這些網(wǎng)站通常由同一組織或個(gè)人擁有,并且經(jīng)常會(huì)互相鏈...詳情>>

2023-10-14 22:46:12
自編碼器是什么?

一、自編碼器原理自編碼器的設(shè)計(jì)靈感源于神經(jīng)科學(xué)中關(guān)于感知系統(tǒng)的認(rèn)知原理,它的核心思想是將輸入數(shù)據(jù)經(jīng)過(guò)編碼過(guò)程,形成一個(gè)隱藏層的特征表示...詳情>>

2023-10-14 22:41:10
什么是云網(wǎng)融合?

一、云網(wǎng)融合的定義云網(wǎng)融合是指將云計(jì)算與網(wǎng)絡(luò)技術(shù)相結(jié)合,實(shí)現(xiàn)資源的共享、業(yè)務(wù)的協(xié)同,將網(wǎng)絡(luò)與云端服務(wù)深度融合,提供更靈活、高效、安全的...詳情>>

2023-10-14 22:31:47
什么是setnx、Redlock、Redisson?

一、setnxsetnx是Redis中的一個(gè)命令,用于將鍵值對(duì)(key-value)設(shè)置到Redis數(shù)據(jù)庫(kù)中。其中,setnx表示”Set if Not Exists”,即當(dāng)...詳情>>

2023-10-14 22:22:53