一步一步製作yaffs/yaffs2根檔案系統--生成yaffs/yaffs2映象檔案及下載到開發板
開發環境:Ubuntu 12.04
開發板:mini2440 256M NandFlash 64M SDRAM
交叉編譯器:arm-linux-gcc 4.4.3 點此可下載
BusyBox版本:busybox-1.13.3 點此可下載
yaffs製作工具:mkyaffsimage
yaffs2製作工具:mkyaffs2image(適合64M)、mkyaffs2image-128(適合128M以上)
寫之前的羅嗦
這幾天製作根檔案系統整得我夠嗆,畢竟是初學制作,各種不會,各種谷歌百度,害的我過情人節都在想著根檔案系統!之所以寫下來,主要是想把自己的製作過程記下來,防止以後工作了忘記了,二也是和大家分享,希望能對你有所幫助!本節先講理論知識,我倒是建議本節內容你可以大致瀏覽,做到“知道是這麼回事”的程度就可以了,在後續的製作過程中再結合實際來理解本節內容。要感謝一位DpLife的大哥啊,耐心的在QQ上給我啟示,排除問題原因,好人吶。
不管是想要製作yaffs檔案,還是yaffs2,本文章都適合,只是最後使用不同的工具生成罷了。現在,開始吧!
主要參考書籍
《嵌入式Linux應用程式開發完全手冊》
《國嵌核心驅動進階教材》
檔案系統簡介
理論上說一個嵌入式裝置如果核心能執行起來,且不需要使用者程序的話(估計這種情況很少),是不需要檔案系統的。檔案系統簡單的說就是一種目錄結構,由於linux作業系統的裝置在系統中是以檔案的形式存在(這個很關鍵奧!和win7的不同之處就在於linux的Everything is a File!),將這些檔案分類管理以及提供和核心互動的介面,就形成了一定的目錄結構也就是檔案系統。檔案系統是為使用者反映系統的一種形式,為使用者提供一個檢測控制系統的介面。
而根檔案系統,就是一種特殊的檔案系統。那麼根檔案系統和普通的檔案系統有什麼區別呢?借用書上的話說就是,根檔案系統就是核心啟動時掛載的第一個
Linux支援多種檔案系統,如包括 ext2、ext3、vfat、jffs、ramfs、yaffs 和nfs等,為了對各類檔案系統進行統一管理,Linux引入了虛擬檔案系統 VFS(可別小看這個VFS,它可是解決了linux啟動時的“雞生蛋,蛋生雞”的問題呢),為各類檔案系統提供一個統一的操作介面和應用程式介面。下圖為Linux檔案系統層次關係圖
Yaffs 檔案系統
YAFFS(Yet Another Flash File System)檔案系統是專門為Nand Flash設計的檔案系統,與JFFS/JFFS2檔案系統有些類似,不同之處是 JFFS/JFFS2 檔案系統是專門為Nor Flash的應用場合設計的,而Nor Flash和Nand Flash本質上有較大的區別(壞塊、備用區、容量),所以儘管 JFFS/JFFS2檔案系統也能用與Nand Flash,但對於Nand Flash來說,通常不是最優方案(效能較低,啟動速度稍慢)。而YAFFS利用 NandFlash提供的每個頁面16位元組或64位元組的Spare區(OOB備用區)空間來存放ECC和檔案系統的組織資訊,能夠實現錯誤檢測和壞塊處理。這樣的設計充分考慮了NandFlash以頁面為存取單元的特點,將檔案組織成固定大小的資料段,能夠提高檔案系統的載入速度。
YAFFS目前有yaffs、yaffs2兩個版本,一般來說,yaffs對小頁面(512B+16B/頁)的NandFlash(68M)有很好的支援,yaffs2對更大的頁面(2K+64B/頁)的NandFlash(128M、256M或者更大)支援更好。不得不說說這個yaffs和yaffs2,前幾天學習yaffs製作的時候,我一直以為它們兩個的區別蠻大的(確實有區別),但是後來才發現基本的製作過程是一樣的,不一樣的只是最後生成這兩個版本的工具不一樣!!!!yafffs由mkyaffsimage生成,而yaffs2由mkyaffs2image生成!
BusyBox簡介
BusyBox是一個遵循 GPLv2協議(這是依照書上打的,我可不知道這什麼協議)的開源專案。有人將BusyBox比喻成Linux工具的瑞士軍刀,簡單的說就是Linux的一個大的工具集,包括了Linux中的大部分命令和工具。BusyBox中各種命令與相應的 GNU工具相比,所能提供的選項較少,但是能夠滿足一般應用。因此,BusyBox主要是為各種小型裝置或者嵌入式系統提供。你看,下圖就是利用BusyBox安裝在根檔案系統內的bin目錄下的命令。
嵌入式根目錄下的bin,sbin和usr目錄中的命令以及啟動程式linuxrc通常就是通過BusyBox產生的。BusyBox產生的。BusyBox會根據配置的不同自動生成一些檔案,但是有些根檔案系統下的檔案還是需要使用者自己建立。
Linux 根檔案系統目錄結構
為了在安裝軟體時能夠預知檔案、目錄的位置,為了讓使用者方便地找到不同型別的檔案,在構造檔案系統時,建議遵循FHS標準(File Hierarchy Standard,檔案系統層次標準)。它定義了檔案系統中目錄、檔案分類存放的原則,定義了系統執行時所需的最小檔案、目錄的集合,並列舉了不遵循這些原則的例外情況及其原因。FHS並不是一個強制的標準,但是大多的Linux、Unix發行版本都遵循FHS。
Linux根檔案系統中一般有如圖2所示的幾個目錄,如下圖
下面依次講述這幾個目錄的作用(很可能你會看煩,但是我保證,它真的需要你靜下心去理解,可以在製作的過程中再返回來看)
1、/bin 目錄
該目錄下存放所有使用者(包括系統管理員和一般使用者)都可以使用的、基本的命令。
/bin 目錄下常用的命令有:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir等。
2、/sbin目錄
該目錄下存放系統命令,即只有管理員能夠使用的命令、系統命令還可以存放在/usr/sbin、/usr/local/sbin目錄下。/sbin 目錄中存放的是基本的系統命令,它們用於啟動系統、修復系統等,與/bin目錄相似,在掛接其他檔案系統之前就可以使用 /sbin。
/sbin目錄下常用的命令有:shutdown、reboot、fdisk、fsck等。
不是急迫需要使用的命令存放在/usr/sbin目錄下。本地安裝的(Locally-installed)的系統命令存放在/usr/local/sbin目錄下。
3、/dev 目錄
該目錄下存放的是裝置檔案。裝置檔案是Linux中特有的檔案型別,在Linux系統下,以檔案的方式訪問各種外設,即通過讀寫某個裝置檔案操作某個具體硬體。比如通過“/dev/ttySAC0”檔案可以操作串列埠0,通過“/dev/mtdblock1”可以訪問MTD裝置(NAND Flash、Nor Flash等)的第2個分割槽。在接下來利用uboot啟動的時候要設定入口引數 setenv bootargs "noinitrd root=/dev/mtdblock3 rootfsyle=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M",其中的就是mtdblock3,有的人可能會問為什麼是mtdblock3,而不是mtdblock2呢?這和你的nand flash分割槽有關,咱們在核心移植的時候將nandflash分成了4個區,如下
其中的root分割槽就是用來存放yaffs檔案系統的,對應的為/dev/mtdblock3!
裝置檔案有兩種:字元裝置和塊裝置。裝置檔案可以使用mknod命令建立,詳細的就不講述了。
/dev 的建立有3中方法:
① 手動建立
在製作根檔案系統的時候,就在/dev 目錄下使用mknod命令建立好要使用的裝置檔案,比如ttySAC0等。系統掛接根檔案系統後,就可以使用/dev目錄下的裝置檔案了。但是這種方法只能使用已經建立好的裝置檔案,萬一我以後再插上優盤的時候,優盤這樣的裝置檔案豈不是不能用了?佛說:不好....不好....
② 使用devfs檔案系統。韋老師的書上說已經過時,我直接略過了。
③ udev
udev 是個使用者程式(u是指user space,dev是指device),它能夠根據系統中硬體裝置的狀態更新裝置檔案,包括裝置檔案的建立、刪除等。使用udev機制也不需要在/dev 目錄下建立裝置節點,它需要一些使用者程式的支援,並且核心要支援sysfs檔案系統。它的操作相對複雜,但是靈活性很高。
在 BusyBox中有一個mdev命令(注意,是命令奧),它是udev命令的簡化版本。適合於嵌入式的應用埸合。其具有使用簡單的特點。它的作用,就是在系統啟動和熱插拔或動態載入驅動程式時,自動產生驅動程式所需的節點檔案。在以busybox為基礎構建嵌入式linux的根檔案系統時,使用它是最優的選擇。我接下來的建立根檔案系統會用這種方法。
開發環境:Ubuntu 12.04
開發板:mini2440 256M NandFlash 64M SDRAM
交叉編譯器:arm-linux-gcc 4.4.3 點此可下載
BusyBox版本:busybox-1.13.3 點此可下載
yaffs製作工具:mkyaffsimage
yaffs2製作工具:mkyaffs2image(適合64M)、mkyaffs2image-128(適合128M以上,我的256M的用這個)
1、首先,將咱們製作根檔案系統的BusyBox和mkyaffs2image-128M存放在一個資料夾內,如下
2、執行命令:mkdir rootfs 建立一個資料夾rootfs,咱們的根檔案目錄將建立在這裡,要記得這個目錄的絕對路徑奧,我的路徑為/home/song/rootfs_make/rootfs,咱們在安裝BusyBox的時候要使用這個路徑。
配置BusyBox
3、執行命令:tar -zxf busybox-1.13.3.tar.gz 解壓咱們的busybox (注意,該命令前邊千萬不要加sudo啊!)
4、BusyBox集合了幾百個命令,在一般系統中並不需要全部使用。可以通過配置 BusyBox來選擇這些命令、定製某些命令的功能(選項)、指定BusyBox的連線方法(動態連線還是靜態連線)、指定BusyBox的安裝路徑。執行命令:cd busybox-1.7.0/ 進入該資料夾
5、執行命令:make menuconfig 進入圖形配置介面。
6、下面僅介紹一些常用的選項,以後可以自己新增補全。
Busybox Settings --->
Busybox Library Tuning --->
[*] Fancy shell prompts
選擇Facncy Shell prompts一項,這可以使我們在profile這個檔案中設定的命令提示符PS1中的轉義字元生效
7、指定是否使用靜態連線
Busybox Settings --->
Build Options --->
[ *] Build BusyBox as a static binary (no shared libs)
這裡選擇靜態連結,以靜態連結的方式生成需要的命令!我按照韋老師上使用動態連結沒有成功(注意,我在這裡首先要真摯的道歉!!!括號裡的話是我後加上去的,這裡選擇了靜態連結,所以後面有一步像lib內加入庫是沒必要的,我在這一節做了糾正http://blog.csdn.net/mybelief321/article/details/10068293)
8、選擇交叉編譯工具
Busybox Settings --->
Build Options --->
() Cross Compiler prefix進入Cross Compiler prefix中編輯交叉編譯工具字首為arm-linux-,如下圖
9、支援mdev。這可以很方便地構造 /dev目錄,並且可以支援熱插拔裝置。另外,為方便除錯,選中mount、umount命令,並讓mount命令支援NFS(網路根檔案系統)
Linux System Utilities --->
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
[*] mount
[*] Support mounting NFS file systems
[*] umount
[*] Support option -a
以上這些選項預設都是選擇的。
10、支援Initttab。
Init Utilities --->
[*] Support reading an inittab file
選擇這一項,可以使我們放在/etc下的inittab這個檔案被busybox 的init程序解析,如下圖
以上這些選項,預設的好像都選上了!
11、配置完這些後,退出,選擇YES儲存
編譯和安裝BusyBox
12、執行命令:make 編譯Busybox
出現下圖,編譯完成
友情提示:在這裡不要隨便使用sudo,我前邊用的sudo makemenuconfig 、sudo vim Makefile 、sudo make結果出現了下邊的提示錯誤,很可惡的!!!
13、執行命令:make CONFIG_PREFIX=/home/song/rootfs_make/rootfs install 將BusyBox安裝到你建立的rootfs資料夾內
出現下圖表示已經安裝完成
14、執行命令:cd ../rootfs/ 進入咱們的rootfs資料夾內,可以看到BusyBox已經安裝到了此目錄,自動生成了/bin /sbin /usr linuxrc這4個目錄和檔案
在我們製作交叉編譯工具鏈arm-linux-gcc時,已經生成了glibc庫,可以直接使用它來構建根檔案系統,本文使用的時光盤裡自帶的壓縮庫,由下圖可以看出,這是arm-linux-gcc3.4.5版本的glibc庫,而我的arm-linux-gcc是4.4.3的,可不可以使用呢?答案是可以的!(補充,其實不可以的,所用的動態連結庫必須和你PC機的交叉編譯工具的動態連結庫,所以我這裡必須要用arm-linux-gcc的動態庫。但是,我並沒有修改這個錯誤,而是將錯就錯,所以建議你什麼都不要變,還是按照這篇文章的步驟做下去,我本系列最後一個文章是針對出現的這個錯誤糾錯的,相信你一結合,會明白不少的!)
15、將下載的arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 放在和rootfs同一個資料夾,如下
16、執行命令:tar -jxf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 解壓此庫
我們需要的glibc庫的位置存放在gcc-3.4.5-glibc-2.3.6/arm-linux/lib 資料夾下。
執行命令:ls gcc-3.4.5-glibc-2.3.6/arm-linux/lib 可以看到該目錄下的檔案。其實這個目錄下的檔案並非都屬於glibc庫,比如crt1.o、libstdc++.a等檔案是gcc工具本身生成的。裡面的目錄、檔案可以分為8類。
① 載入器ld-2.3.6.so、ld-linux.so.2。
動態程式啟動前,它們都被用來載入動態庫。
② 目標檔案(.o)。
比如crt1.o、crti.o、crtn.o、Mctr1.o、Scrt1.o等,在生成應用程式時,這些檔案像一般的目標檔案一樣被連結。
③ 靜態庫檔案(.a)。
比如靜態數學庫libm.a、靜態c++庫libstdc++.a等,編譯靜態程式時會連線它們
④ 動態庫檔案(.so、,so.[0-9]*)。
比如動態數學庫libm.so、動態c++庫libstdc++.so等,它們可能是一個連結檔案。編譯動態庫時會用到這些檔案,但是不會連線它們,執行時才連線。
⑤ libtool庫檔案(.la)。
在連線庫檔案時,這些檔案會被用到,比如它們列出了當前庫檔案所依賴的其他庫檔案。程式執行時無需這些檔案。
⑥ gconv目錄。
裡面是有頭字元的集的動態庫,比如ISO8859-1.so、GB18010.so等。
⑦ ldscripts目錄。
裡面是各種連線指令碼,在編譯應用程式時,它們被用於制定程式的執行地址、各段的位置等。
⑧ 其他目錄及檔案。
17、現在安裝glibc庫,在上一節我們編譯安裝busybox時使用的是動態連線,這裡在開發板上只需要載入器和動態庫。
執行命令:mkdir -p rootfs/lib 在rootfs中建立lib資料夾,用來存放咱們的載入器和動態庫
執行命令:cp gcc-3.4.5-glibc-2.3.6/arm-linux/lib/*.so* rootfs/lib/ 安裝glibc庫到咱們的資料夾下
18、執行命令:cd rootfs 進入到rootfs資料夾,此時可以看到在lib資料夾已經有咱們需要的庫了。
至此,glibc庫已經安裝完成,也已經在根檔案目錄下建立了/lib目錄。其實,上面複製的庫檔案不是每個檔案都會被用到,可以根據應用程式對庫的依賴關係保留需要用到的。通過ldd命令可以檢視一個應用程式會用到哪些庫。
前面兩節介紹瞭如何安裝Busybox、C庫,建立了 bin/、sbin/、usr/sbin、usr/bin、lib/等目錄,最小根檔案系統的大部分目錄、檔案已經建好,本節介紹剩下的部分。
構建 /etc目錄
19、執行命令:mkdir etc 建立一個etc目錄
執行命令:cd etc 進入該目錄
20、執行命令:vim mdev.conf 建立mdev.conf。前邊已經介紹mdev是一個udev的簡化版本,主要用來支援一些熱插拔裝置。我們可以通過檔案mdev.conf自定義一些裝置節點的名稱或連結來滿足特定的需要,但在此處讓它為空。
21、在啟動過程中bootloader會傳遞引數init=/linuxrc給核心的main( )函式,所以在檔案系統被掛載後,執行的第一個程式是linuxrc,而linuxrc是一個指向/bin/busybox的連結檔案,也就是說檔案系統被掛在後執行的第一個程式是busybox。Busybox首先會解析檔案/etc/inittab,這個檔案中存放的是系統的配置資訊,這些配置資訊指明瞭接下來將要啟動那些程式。
執行命令:vim inittab 建立 inittab檔案
內容如下:
#/etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
/etc/inittab 檔案中每個條目用來定義一個子程序,並確定它的啟動方法,格式如下
<id>:<runlevels>:<action>:<process>
<id>:表示這個程序要使用的控制檯(即標準輸入、標準輸出、標準錯誤裝置)。如果省 略,則使用與init程序一樣的控制檯。
<runlevels>:對於Busybox init程式,這個欄位滑意義,可以省略。
<action>:表示init程式如何控制這個子程序,
<process>: 要執行的程式,它可以是可執行程式,也可以是指令碼
檔案etc/inittab配置條目說明如下:
::sysinit:/etc/init.d/rcS 啟動系統初始化檔案/etc/init.d/rcS。欄位sysinit表明檔案/etc/init.d/rcS在系統啟動後最先執行,並且只執行一次,init程序等待它結束才繼續執行其它動作。(指令碼檔名一般為rc,字尾S代表單使用者執行級別指令碼)
s3c2410_serial0::askfirst:-/bin/sh 在串列埠s3c2410_serial0上啟動askfirst動作的shell。S3C2410的串列埠名在/dev下是s3c2410_serialx。在mini2440移植核心時定義的串列埠名為s3c2410_serial0。需要注意的是,開發板上通過mdev生成的/dev目錄中,S3C2410、S3C2440的串列埠名是s3c2410_serial0、s3c2410_serial1、s3c2410_serial2,不是 ttySAC0、ttySAC1、ttySAC2。當靜態建立裝置檔案時,這裡要將s3c2410_serial0 修改為 ttySAC0 。askfirst表明init程序先輸出“Please press Enter to actvie this console”,等使用者輸入回車鍵之後才啟動-/bin/sh。
::ctrlaltdel:/sbin/reboot 當按下Ctrl+Alt+Delete組合鍵時,init重啟執行程式。欄位ctrlaltdel表明當按下Ctrl+Alt+Delete組合鍵時,執行相應的程序。
::shutdown:/bin/umount -a -r 告訴init在關機時執行umount命令解除安裝所有的檔案系統,如果解除安裝失敗,試圖以只讀方式重新掛載。欄位shutdown表明在重啟關閉系統命令時執行相應程序。
22、當解析完檔案etc/inittab後就將啟動這些程序,首先要執行的是啟動指令碼etc/init.d/rcS。
執行命令:mkdir init.d 建立一個init.d資料夾
執行命令:cd init.d 進入該資料夾
23、執行命令:vim rcS 編寫rcS可執行檔案,這是一個指令碼檔案,可以在裡面新增想自動執行的命令。
內容如下
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
詳解:
#!/bin/sh #用busybox的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #shell命令的搜尋路徑
runlevel=S #執行在單使用者模式
prevlevel=N #前一個級別,為N則表示沒有前一個級別
umask 022 #許可權位掩碼
export PATH runlevel prevlevel #將環境的變數匯出到環境中
mount -a #將檔案 /etc/fstab 中指明的檔案掛載到對應的掛載點上
echo /sbin/mdev>/proc/sys/kernel/hotplug #當有熱插拔事件產生時, 核心就會呼叫位於/sbin目錄的 mdev。 這時 mdev通過環境變數中的 ACTION 和 DEVPATH,(這兩個變數是系統自帶的)來確定此次熱插拔事件的動作以及影響了/sys 中的那個目錄。接著會看看這個目錄中是否有“dev”的屬性檔案,如果有就利用這些資訊為 這個裝置在/dev 下建立裝置節點檔案。
mdev -s #建立dev目錄。以‘-s’為引數呼叫位於/sbin 目錄寫的 mdev(其實是個連結,作用是傳遞引數給/bin目錄下的busybox 程式並呼叫它) ,mdev掃描 /sys/class和/sys/block中所有的類裝置目錄,如果在目錄中含有名為“dev”的檔案,且檔案中包含的是裝置號,則 mdev 就利用這些資訊為這個裝置在/dev下建立裝置節點檔案。一般只在啟動時才執行一次 “mdev -s” 。
24、執行命令:chmod +x rcS 改變rcS的屬性,使它可執行。
25、執行命令:cd .. 返回上一級目錄
執行命令:vim fstab ,建立fstab檔案。
內容如下
#device mount-point type option 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
編寫好之後,儲存退出。
26、執行命令:cd .. 返回根檔案系統目錄
27、執行命令: mkdir dev 建立dev目錄
28、執行命令:cd dev 進入該目錄,準備建立裝置節點
29、先後執行命令:sudo mknod console c 5 1
sudo mknod null c 1 3
因為mdev是通過init程序來啟動的,在使用mdev構造 /dev 目錄之前,init 程序至少要用到裝置檔案 /dev/console、/dev/null,所以要建立這兩個裝置檔案。
30、執行命令:cd ../ 返回上一級目錄
31、執行命令:mkdir proc mnt tmp sys root home 建立剩餘的目錄
到這裡,在rootfs下就是一個非常小的根檔案系統。我將這個根檔案系統打包傳上去了,如有需要,請自行下載
我的板子是256M的,所以在這裡我需要利用mkyaffs2iamge-128M工具製作成yaffs2映象檔案。
32、執行命令:./mkyaffs2image-128M rootfs/ rootfs.yaffs2 生成yaffs2映象檔案
如果要生成yaffs映象檔案,則執行命令:./mkyaffsimage rootfs/ rootfs.yaffs
33、現在就將製作好的映象檔案下載到開發板中去。利用supervivi的a命令將uboot下載到開發板去,然後nand flash啟動。
34、燒寫核心檔案uImage
先後執行命令:
tftp 0x30008000 uImage
nand erase 0x80000 0x500000
nand write 0x30008000 0x80000 0x500000
35、燒寫yaffs2映像檔案
先後執行命令:
tftp 0x30008000 rootfs.yaffs2
nand erase 0x580000 7a80000
nand write.yaffs 0x30008000 0x580000 dbb040
36、設定核心引數
先後執行命令:
setenv bootargs "noinitrd root=/dev/mtdblock3 rootfstyle=yaffs2 console=ttySAC0,115200 init=/linuxrc mem=64M"
setenv bootcmd "nand read 0x30008000 0x80000 0x500000;bootm 0x30008000"
saveenv
37、重啟開發板,可以看到咱們的根檔案系統啟動了,儘管不完善,後面我將接著完善。
其實,說實話,我是真心的建議你先用nfs測試你的檔案系統,先不要著急直接下載到nand flash裡邊,畢竟來回擦除也傷害板子呢!先吃飯去了,太熱了!
相關推薦
一步一步製作yaffs/yaffs2根檔案系統--生成yaffs/yaffs2映象檔案及下載到開發板
開發環境:Ubuntu 12.04 開發板:mini2440 256M NandFlash 64M SDRAM 交叉編譯器:arm-linux-
轉一篇比較詳細介紹FatFs檔案系統移植的文章 FatFs檔案系統的移植
因為需要,又不想自己寫,所以就移植了一個檔案系統。 說下我的硬體和開發工具:接成 TRUE IDE 模式下的CF卡(也就是相當於一塊硬碟了),三星S3C2440的ARM9,開發工具是很老很老的D版的ADS1.2。
嵌入式Linux檔案系統-jffs2,yaffs2,ubifs,ramfs,網路檔案系統,
綜述: 常見的檔案系統有統的格式有:jffs2,yaffs2,ubifs等。但可基於儲存或者執行的位置可分為 flash型檔案系統,Ram型檔案系統,網路檔案系統 Flash型檔案系統: Flash因為其特殊的硬體結構,普通的檔案系統如ext2,ext3等不適合使用。常見的檔案系統的
一步一步製作yaffs/yaffs2根檔案系統(四)---構建etc、dev等剩餘目錄
開發環境:Ubuntu 12.04 開發板:mini2440 256M NandFlash 64M SDRAM
一步一步製作yaffs/yaffs2根檔案系統(一)
開發環境:Ubuntu 12.04 開發板:mini2440 256M NandFlash 64M SDRAM
Linux:一步一步製作自己的根檔案系統
一步一步製作自己的根檔案系統 在這裡,實驗過程使用的是九鼎提供的S5PV210開發板,實驗核心同樣來自其官方資料盤中Linux資料包中的的QT4.8中的相關原始碼,實驗的NFS檔案系統在虛擬中的Ubuntu14.04中建立. 建立檔案系統根目錄 root
一步一步教你用 Vue.js + Vuex 製作專門收藏微信公眾號的 app
寫於 2016.06.30 只看不讚,或者只收藏不讚的都是耍流氓,放學別走,我找我哥收拾你們。 專案地址:github.com/jrainlau/we… 下載&執行 git clone [email protected]:jra
一步一步教你做ios推送 pem證書製作 php推送
最近在研究ios的推送問題,遇到了一些問題,最終整理了一下。放在這裡和大家分享 APNS的推送機制 首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖 Provider就是我們自己程式的後臺伺服器,APNS是Apple Push Notification Service的縮寫,也就是
【Unity3D實戰】零基礎一步一步教你製作酷跑類遊戲(1)
首先做個自我介紹,我是一名在讀的大三學生,軟體工程遊戲開發方向。 一直以來,我夢想著成為一名遊戲開發者,所以在大三分方向時我毫不猶豫地選擇了遊戲開發方向。剛剛接觸 Unity3D一段時間,現在需要大量
【Unity3D實戰】零基礎一步一步教你製作跑酷類遊戲(填坑完整版)
在兩個月前曾寫了一篇《【Unity3D實戰】零基礎一步一步教你製作跑酷類遊戲(1)》,裡面一步一步演示了製作跑酷類遊戲,然而由於時間原因,只寫到了讓角色往前移動為止。這個坑一直沒有時間去填,(雖然也沒
手動一步一步來製作備份Raspberry Pi樹莓派SD卡的img映像檔案(不用dd命令)
之前複製或者備份樹莓派的SD卡,都是用dd命令全盤複製,可以用,但是這樣有兩大缺點: 1. 慢 2. 一個大的SD卡,比如64G,即使只用了2G,經過dd命令生成的img檔案也會生成一個和整個SD卡容量一樣大小的檔案,即64G 於是,需要有一個可以解決上述問題的製作樹莓
跟我一步一步製作一個基本的linux啟動盤
原創文章,轉載請註明出處,謝謝! 作者:清林,部落格名:飛空靜渡 這是一篇自己很早寫的文章了,當時根據網上的一些教程一步一步製作,本來想把自己做的過程放到網上,可以西一值忙於公司專案,沒有時間,去年想放上來的時候發現csdn上傳不
【教程】馬賽克拼圖製作軟體(Foto-Mosaik-Edda)——一步一步慢慢來
圖片宣告:我最愛的一部電影《楚門的世界》 第一步 將下載好的軟體解壓安裝,並雙擊開啟(注:此款軟體十分十分之小,下載下來不到2M) 圖一:解壓到桌面的快捷方式如圖所示 第二步 建立圖片資料庫並匯入你想要的圖片,此圖片在大圖中將以馬賽克形式呈
Win10系統下一步一步教你實現MASK_RCNN訓練自己的資料集(使用labelme製作自己的資料集)及需要注意的大坑
一、Labelme的安裝 二、製作自己的資料集 2.1 首先使用labelme標註如下樣式圖片(我的圖片是jpg格式) 2.2每個檔案生成一個對應的.json檔案。如下 2.3執行上面參考部落格最後給
為linux核心構建最小的根檔案系統-一步一步精簡
linux核心init程序函式的部分程式碼如下: 01 if (execute_command) 02 run_init_process(execute_command); 03 04 run_init_process("/sbin/init");
一步一步教你製作銷售目標分析報告
前面的文章中我已經使用了一個入門案例動態銷售報告來帶領大家入門PowerBI的入門學習,基於動態銷售報告,我可以在來進行細化處理銷售目標表中的資料。本文的主題就是銷售目標的分析。我們都知道銷售目標是銷售的起點,銷售人員每天的跟進都可以來反映銷售目標完成情況。因此,將銷售目標的顆粒度細化到每一天很有必要。
一步一步教你如何重裝筆記本電腦系統?
splay 出錯 經歷 fff 過程 rep 聯想 isp pre 本文標簽: 電腦技巧 重裝筆記本電腦系統 重裝系統 重裝dell聯想宏碁電腦系統 原文地址:http://whosmall.com/?post=461 不知不覺中,已在程序猿這個職業中瘋狂熬過去了3年時間
CentOS 7 一步一步搭建LAMP
centos7 lamp一、準備環境1、系統版本[[email protected]/* */ ~]# cat /proc/versionLinux version 3.10.0-514.16.1.el7.x86_642、關防火墻[[email protected]/* */ ~]#
一步一步搭建客服系統 (4) 客戶列表 - JS($.ajax)調用WCF 遇到的各種坑
clu web operation script ont javascrip -1 mod ima 閱讀目錄 1 創建WCF服務 2 調用WCF 3 配置 4 遇到的各種坑 本文以一個生成、獲取“客戶列表”的demo來介紹如何用js調用wcf,以及遇到的各種問題。
[透析] 卷積神經網絡CNN究竟是怎樣一步一步工作的?(轉)
caff 素數 aec near chris line 旋轉 均值 水平 視頻地址:https://www.youtube.com/embed/FmpDIaiMIeA 轉載:http://www.jianshu.com/p/fe428f0b32c1 文檔參閱:pdf