當前位置:首頁 » 操作系統 » mkfs源碼

mkfs源碼

發布時間: 2022-06-21 04:01:43

⑴ 如何交叉編譯mkfs.jffs2等工具鏈mtd-utils

首先說明一下:
在YAFFS2源文件的utils目錄下,執行make就可以生成 mkyaffs2image工具,執行
.(要製作yaffs2的目錄) (目標鏡像)/mkyaffs2image

acl_2.2.47.orig.tar.gz
lzo-2.03.tar.gz
mtd-utils_20080508.orig.tar.gz
zlib-1.2.3.tar.gz
mkfs.jffs2.for.arm-linux-gcc.3.4.1平台.tar.bz2
mkfs.jffs2.for.arm-linux-gcc.4.3.2平台.tar.bz2
mkfs.jffs2.for.pc平台.tar.bz2

如果只需要mkfs.jffs2工具,那麼ubuntu 8.10下直接安裝jffnms軟體包即可,
luther@gliethttp:~$ sudo apt-get install jffnms
如果需要將jffs2移植到arm開發板上,那麼就需要下載源碼進行交叉編譯了,這就是本文的內容.
1.下載工具軟體源碼包
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/m/mtd-utils/mtd-utils_20080508.orig.tar.gz
luther@gliethttp:~$ wget http://www.zlib.net/zlib-1.2.3.tar.gz
luther@gliethttp:~$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
luther@gliethttp:~$ mkdir libs 用來存放下面生成的lib庫.
2.編譯zlib庫
luther@gliethttp:~/zlib-1.2.3$ ./configure --prefix=~/libs --shared
對於交叉編譯輸入如下指令
luther@gliethttp:~/zlib-1.2.3$ CC=arm-linux-gcc ./configure --prefix=~/libs --shared
luther@gliethttp:~/zlib-1.2.3$ make -j4
luther@gliethttp:~/zlib-1.2.3$ make install
luther@gliethttp:~$ tree ~/libs
/home/ubuntu/libs
|-- include
| |-- zconf.h
| `-- zlib.h
|-- lib
| |-- libz.so -> libz.so.1.2.3
| |-- libz.so.1 -> libz.so.1.2.3
| `-- libz.so.1.2.3
`-- share
`-- man
`-- man3
`-- zlib.3
5 directories, 6 files
這就表示完成了.
3.編譯lzo庫
luther@gliethttp:~/lzo-2.03$ ./configure --prefix=/home/ubuntu/libs --enable-shared
對於交叉編譯輸入如下指令
luther@gliethttp:~/lzo-2.03$ CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/ubuntu/libs --enable-shared --disable-static
這個還必須要絕對路徑才行.
luther@gliethttp:~/lzo-2.03$ make
luther@gliethttp:~/lzo-2.03$ make install
luther@gliethttp:~$ tree ~/libs
.
|-- include
| |-- lzo
| | |-- lzo1.h
| | |-- lzo1a.h
| | |-- lzo1b.h
| | |-- lzo1c.h
| | |-- lzo1f.h
| | |-- lzo1x.h
| | |-- lzo1y.h
| | |-- lzo1z.h
| | |-- lzo2a.h
| | |-- lzo_asm.h
| | |-- lzoconf.h
| | |-- lzodefs.h
| | `-- lzoutil.h
| |-- zconf.h
| `-- zlib.h
|-- lib
| |-- liblzo2.a
| |-- liblzo2.la
| |-- liblzo2.so -> liblzo2.so.2.0.0
| |-- liblzo2.so.2 -> liblzo2.so.2.0.0
| |-- liblzo2.so.2.0.0
| `-- libz.a
`-- share
`-- man
`-- man3
`-- zlib.3
6 directories, 22 files
手工將靜態庫刪掉就行了,
如果是arm平台還需要strip優化.
4.編譯mtd-utils-20080508前的准備工作.
編譯之前的代碼工作
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/a/acl/acl_2.2.47.orig.tar.gz
luther@gliethttp:~$ mkdir libs/include/sys -p
luther@gliethttp:~$ cp acl-2.2.47/include/acl.h libs/include/sys
luther@gliethttp:~/mtd-utils-20080508$ export LD_LIBRARY_PATH=~/libs/lib:$LD_LIBRARY_PATH
如果還找不到-llzo2,那麼把他拷到/usr/lib下,對於交叉編譯器,就是拷貝到
比如
luther@gliethttp:~/libs/lib$ sudo cp -a * /vobs/tools/arm-tools/arm-linux-gcc-3.4.1/arm-linux/lib/
luther@gliethttp:~/mtd-utils-20080508$ vim Makefile
修改安裝路徑
DESTDIR=.
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
修改CFLAGS變數
CFLAGS := -I./include -I/home/ubuntu/libs/include $(OPTFLAGS)
如果是arm-linux-gcc定義為
CFLAGS := -I./include -I/home/ubuntu/libs/include -DAI_ADDRCONFIG=0x0020 $(OPTFLAGS)
來自/usr/include/netdb.h
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/Makefile
DESTDIR := ~/mtd-utils-20080508
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
luther@gliethttp:~/mtd-utils-20080508$ vim recv_image.c
拷貝/usr/include/netinet/in.h文件中
arm-linux-gcc中不需要拷貝它.
struct ip_mreq
{

struct in_addr imr_multiaddr;

struct in_addr imr_interface;
};
結構體數據到頭部,否則在u盤版的ubuntu 8.10上老是提示沒有ip_mreq定義,雖然上面明明寫了#define _USE_MISC
arm-linux-gcc中還需要創建如3下個目錄
luther@gliethttp:~/mtd-utils-20080508$ mkdir arm-linux
luther@gliethttp:~/mtd-utils-20080508$ cp -r ubi-utils arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ cp -r include arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/libpfiflash.c
將所有EBUF(PFIFLASH_ERRSTR[-rc]);全部替換為EBUF("%s", PFIFLASH_ERRSTR[-rc]);
vim下替換腳本
:%s/EBUF(PFIFLASH_ERRSTR\[-rc\]);/EBUF("\%s", PFIFLASH_ERRSTR\[-rc\]);/g
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/ubimirror.c
將第206行的
fprintf(stderr, err_buf);
改為
fprintf(stderr, "%s", err_buf); // 想法是好的,因為err_buf中含有%d等format信息,這樣介面更加統一,但是編譯器似乎還並不支持這樣的操作.[luther.gliethttp]
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/unubi.c
將第898行
char fname[PATH_MAX];
改為
char fname[PATH_MAX+1];
luther@gliethttp:~/mtd-utils-20080508$ cd ubi-utils/new-utils
因為-O2優化的原因,會導致如下log信息
error: ignoring return value of 『scanf』, declared with attribute warn_unused_result
所有手工先編譯.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
對於交叉編譯執行如下1條語句
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ arm-linux-gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ cd -
好了,上面的所有修改完成之後,就可以執行make成功編譯了[luther.gliethttp].
luther@gliethttp:~/mtd-utils-20080508$ make
如果是交叉編譯,執行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux-
luther@gliethttp:~/mtd-utils-20080508$ make install
對於交叉編譯,執行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux- install
luther@gliethttp:~/mtd-utils-20080508$ tree gliethttp/
gliethttp/
|-- sbin
| |-- bin2nand
| |-- doc_loadbios
| |-- docfdisk
| |-- flash_erase
| |-- flash_eraseall
| |-- flash_info
| |-- flash_lock
| |-- flash_otp_mp
| |-- flash_otp_info
| |-- flash_unlock
| |-- flashcp
| |-- ftl_check
| |-- ftl_format
| |-- jffs2mp
| |-- mkbootenv
| |-- mkfs.jffs2
| |-- mkpfi
| |-- mtd_debug
| |-- nand2bin
| |-- nandmp
| |-- nandtest
| |-- nandwrite
| |-- nftl_format
| |-- nftlmp
| |-- pddcustomize
| |-- pfi2bin
| |-- pfiflash
| |-- recv_image
| |-- rfdmp
| |-- rfdformat
| |-- serve_image
| |-- sumtool
| |-- ubiattach
| |-- ubicrc32
| |-- ubicrc32.pl
| |-- ubidetach
| |-- ubigen
| |-- ubimirror
| |-- ubimkvol
| |-- ubinfo
| |-- ubinize
| |-- ubirmvol
| |-- ubiupdatevol
| `-- unubi
`-- share
`-- man
`-- man1
`-- mkfs.jffs2.1.gz
4 directories, 45 files
ep9312開發板上沒有任何文件系統flash數據讀取
# ./mtd_debug read /dev/mtd0 0 100 gliethttp.bin
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
# hexmp gliethttp.bin
0000000 03ff ea00 350c e59f 001c e583 410e e3a0
0000010 4004 e583 4a03 e3a0 4001 e254 fffd 1aff
0000020 4106 e3a0 4004 e583 420f e202 5000 e594
0000030 4001 e084 5000 e594 4001 e084 5000 e594
0000040 4001 e084 5000 e594 4010 e3a0 4008 e583
0000050 4050 e3a0 4001 e254 fffd 1aff 4e1e e3a0
0000060 4008 e583
0000064
#
# ./mtd_debug read /dev/mtd2 0 100 gliethttp.bin;hexmp gliethttp.bin -Cv
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
00000000 1f 8b 08 00 ca 14 7d 4a 02 03 e4 5a 0f 70 93 e7 |......}J...Z.p..|
00000010 79 7f 3f 49 36 b2 31 41 80 a0 0e 38 cd 57 70 16 |y.?I6.1A...8.Wp.|
00000020 93 18 f3 19 3b 60 12 9a d9 60 08 09 4e 22 c0 a4 |....;`...`..N"..|
00000030 b4 81 ca 42 92 6d 0d 59 d2 49 72 02 2b 4d dd 60 |...B.m.Y.Ir.+M.`|
00000040 72 84 e1 86 03 a7 21 01 8a d2 b2 4b 2e f3 56 76 |r.....!....K..Vv|
00000050 63 b7 34 0b 1d cd b1 1d 6b b3 95 36 dc 95 db d1 |c.4.....k..6....|
00000060 8b 90 d1 ea |....|
00000064

⑵ 基本linux命令

基本linux命令有哪些呢?

1、ls命令
就是 list 的縮寫,通過 ls 命令不僅可以查看 linux 文件夾包含的文件,而且可以查看文件許可權(包括目錄、文件夾、文件許可權)查看目錄信息等等。
常用參數搭配:
ls -a 列出目錄所有文件,包含以.開始的隱藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改時間排序
ls -S 以文件大小排序
ls -h 以易讀大小顯示
ls -l 除了文件名之外,還將文件的許可權、所有者、文件大小等信息詳細列出來
實例:
(1) 按易讀方式按時間反序排序,並顯示文件詳細信息
ls -lhrt
(2) 按大小反序顯示文件詳細信息
ls -lrS
(3)列出當前目錄中所有以"t"開頭的目錄的詳細內容
ls -l t*
(4) 列出文件絕對路徑(不包含隱藏文件)
ls | sed "s:^:`pwd`/:"
(5) 列出文件絕對路徑(包含隱藏文件)
find $pwd -maxdepth 1 | xargs ls -ld
2、cd 命令
cd(changeDirectory) 命令語法:
cd [目錄名]
說明:切換當前目錄至 dirName。
實例:
(1)進入要目錄
cd /
(2)進入 "home" 目錄
cd ~
(3)進入上一次工作路徑
cd -
(4)把上個命令的參數作為cd參數使用。
cd !$
3、pwd 命令
pwd 命令用於查看當前工作目錄路徑。
實例:
(1)查看當前路徑
pwd
(2)查看軟鏈接的實際路徑
pwd -P
4、mkdir 命令
mkdir 命令用於創建文件夾。
可用選項:
-m: 對新建目錄設置存取許可權,也可以用 chmod 命令設置;
-p: 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,系統將自動建立好那些尚不在的目錄,即一次可以建立多個目錄。
實例:
(1)當前工作目錄下創建名為 t的文件夾
mkdir t
(2)在 tmp 目錄下創建路徑為 test/t1/t 的目錄,若不存在,則創建:
mkdir -p /tmp/test/t1/t
5、rm 命令
刪除一個目錄中的一個或多個文件或目錄,如果沒有使用 -r 選項,則 rm 不會刪除目錄。如果使用 rm 來刪除文件,通常仍可以將該文件恢復原狀。
rm [選項] 文件…
實例:
(1)刪除任何 .log 文件,刪除前逐一詢問確認:
rm -i *.log
(2)刪除 test 子目錄及子目錄中所有檔案刪除,並且不用一一確認:
rm -rf test
(3)刪除以 -f 開頭的文件
rm -- -f*
6、rmdir 命令
從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須具有對其父目錄的寫許可權。
注意:不能刪除非空目錄
實例:
(1)當 parent 子目錄被刪除後使它也成為空目錄的話,則順便一並刪除:
rmdir -p parent/child/child11
7、mv 命令
移動文件或修改文件名,根據第二參數類型(如目錄,則移動文件;如為文件則重命令該文件)。
當第二個參數為目錄時,第一個參數可以是多個以空格分隔的文件或目錄,然後移動第一個參數指定的多個文件到第二個參數指定的目錄中。
實例:
(1)將文件 test.log 重命名為 test1.txt
mv test.log test1.txt
(2)將文件 log1.txt,log2.txt,log3.txt 移動到根的 test3 目錄中
mv llog1.txt log2.txt log3.txt /test3
(3)將文件 file1 改名為 file2,如果 file2 已經存在,則詢問是否覆蓋
mv -i log1.txt log2.txt
(4)移動當前文件夾下的所有文件到上一級目錄
mv * ../
8、cp 命令
將源文件復制至目標文件,或將多個源文件復制至目標目錄。
注意:命令行復制,如果目標文件已經存在會提示是否覆蓋,而在 shell 腳本中,如果不加 -i 參數,則不會提示,而是直接覆蓋!
-i 提示
-r 復制目錄及目錄內所有項目
-a 復制的文件與原文件時間一樣
實例:
(1)復制 a.txt 到 test 目錄下,保持原文件時間,如果原文件存在提示是否覆蓋。
cp -ai a.txt test
(2)為 a.txt 建議一個鏈接(快捷方式)
cp -s a.txt link_a.txt
9、cat 命令
cat 主要有三大功能:
1.一次顯示整個文件:
cat filename
2.從鍵盤創建一個文件:
cat > filename
只能創建新文件,不能編輯已有文件。
3.將幾個文件合並為一個文件:
cat file1 file2 > file
-b 對非空輸出行號
-n 輸出所有行號
實例:
(1)把 log2012.log 的文件內容加上行號後輸入 log2013.log 這個文件里
cat -n log2012.log log2013.log
(2)把 log2012.log 和 log2013.log 的文件內容加上行號(空白行不加)之後將內容附加到 log.log 里
cat -b log2012.log log2013.log log.log
(3)使用 here doc 生成新文件
cat >log.txt <<EOF
>Hello
>World
>PWD=$(pwd)
>EOF
ls -l log.txt
cat log.txt
Hello
World
PWD=/opt/soft/test
(4)反向列示
tac log.txt
PWD=/opt/soft/test
World
Hello
10、more 命令
功能類似於 cat, more 會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示。
命令參數:
+n 從笫 n 行開始顯示
-n 定義屏幕大小為n行
+/pattern 在每個檔案顯示前搜尋該字串(pattern),然後從該字串前兩行之後開始顯示
-c 從頂部清屏,然後顯示
-d 提示「Press space to continue,』q』 to quit(按空格鍵繼續,按q鍵退出)」,禁用響鈴功能
-l 忽略Ctrl+l(換頁)字元
-p 通過清除窗口而不是滾屏來對文件進行換頁,與-c選項相似
-s 把連續的多個空行顯示為一行
-u 把文件內容中的下畫線去掉
常用操作命令:
Enter 向下 n 行,需要定義。默認為 1 行
Ctrl+F 向下滾動一屏
空格鍵 向下滾動一屏
Ctrl+B 返回上一屏
= 輸出當前行的行號
:f 輸出文件名和當前行的行號
V 調用vi編輯器
!命令 調用Shell,並執行命令
q 退出more
實例:
(1)顯示文件中從第3行起的內容
more +3 text.txt
(2)在所列出文件目錄詳細信息,藉助管道使每次顯示 5 行
ls -l | more -5
按空格顯示下 5 行。
11、less 命令
less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向後移動,而且 less 在查看之前不會載入整個文件。
常用命令參數:
-i 忽略搜索時的大小寫
-N 顯示每行的行號
-o <文件名> 將less 輸出的內容在指定文件中保存起來
-s 顯示連續空行為一行
/字元串:向下搜索「字元串」的功能
?字元串:向上搜索「字元串」的功能
n:重復前一個搜索(與 / 或 ? 有關)
N:反向重復前一個搜索(與 / 或 ? 有關)
-x <數字> 將「tab」鍵顯示為規定的數字空格
b 向後翻一頁
d 向後翻半頁
h 顯示幫助界面
Q 退出less 命令
u 向前滾動半頁
y 向前滾動一行
空格鍵 滾動一行
回車鍵 滾動一頁
[pagedown]: 向下翻動一頁
[pageup]: 向上翻動一頁
實例:
(1)ps 查看進程信息並通過 less 分頁顯示
ps -aux | less -N
(2)查看多個文件
less 1.log 2.log
可以使用 n 查看下一個,使用 p 查看前一個。
12、head 命令
head 用來顯示檔案的開頭至標准輸出中,默認 head 命令列印其相應文件的開頭 10 行。
常用參數:
-n<行數> 顯示的行數(行數為復數表示從最後向前數)
實例:
(1)顯示 1.log 文件中前 20 行
head 1.log -n 20
(2)顯示 1.log 文件前 20 位元組
head -c 20 log2014.log
(3)顯示 t.log最後 10 行
head -n -10 t.log
13、tail 命令
用於顯示指定文件末尾內容,不指定文件時,作為輸入信息進行處理。常用查看日誌文件。
常用參數:
-f 循環讀取(常用於查看遞增的日誌文件)
-n<行數> 顯示行數(從後向前)
(1)循環讀取逐漸增加的文件內容
ping 127.0.0.1 > ping.log &
後台運行:可使用 jobs -l 查看,也可使用 fg 將其移到前台運行。
tail -f ping.log
(查看日誌)
14、which 命令
在 linux 要查找某個文件,但不知道放在哪裡了,可以使用下面的一些命令來搜索:
which 查看可執行文件的位置。
whereis 查看文件的位置。
locate 配合資料庫查看文件位置。
find 實際搜尋硬碟查詢文件名稱。
which 是在 PATH 就是指定的路徑中,搜索某個系統命令的位置,並返回第一個搜索結果。使用 which 命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。
常用參數:
-n 指定文件名長度,指定的長度必須大於或等於所有文件中最長的文件名。
實例:
(1)查看 ls 命令是否存在,執行哪個
which ls
(2)查看 which
which which
(3)查看 cd
which cd(顯示不存在,因為 cd 是內建命令,而 which 查找顯示是 PATH 中的命令)
查看當前 PATH 配置:
echo $PATH
或使用 env 查看所有環境變數及對應值
15、whereis 命令
whereis 命令只能用於程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。whereis 及 locate 都是基於系統內建的資料庫進行搜索,因此效率很高,而find則是遍歷硬碟查找文件。
常用參數:
-b 定位可執行文件。
-m 定位幫助文件。
-s 定位源代碼文件。
-u 搜索默認路徑下除可執行文件、源代碼文件、幫助文件以外的其它文件。
實例:
(1)查找 locate 程序相關文件
whereis locate
(2)查找 locate 的源碼文件
whereis -s locate
(3)查找 lcoate 的幫助文件
whereis -m locate

⑶ 如何在nand flash上實現JFFS2根文件文件系統

JFFS2是Flash上應用最廣的一個日誌結構文件系統。它提供的垃圾回收機制,不需要馬上對擦寫越界的塊進行擦寫,而只需要將其設置一個標志,標明為臟塊,當可用的塊數不足時,垃圾回收機制才開始回收這些節點。同時,由於JFFS2基於日誌結構,在意外掉電後仍然可以保持數據的完整性,而不會丟失數據。

本文闡述如何在nand flash上實現JFFS2根文件文件系統。實驗環境是:FS2410開發平台及ubantu7.04主機環境。

由於使用的ubantu7.04的環境沒有安裝製作JFFS2文件系統鏡像的工具mkfs.jffs2,所以首先在Linux系統中安裝mkfs.jffs2工具,安裝的過程如下:

1.下載MTD工具包

本處使用的是mtd-snapshot-20050519.tar.bz2:

farsight#tar –jxvf
mtd-snapshot-20050519.tar.bz2

farsight#cd mtd

farsight#./configure

farsight#make

farsight#make
install

如果系統中沒有安裝ZLIB庫,那麼首先安裝ZLIB庫。具體的安裝過程如下:

farsight#tar –zxvf
zlib-1.2.3.tar.gz

farsight#cd
zlib-1.2.3

farsight#./configure

farsight#make

farsight#make
install

完成此步驟後,系統中就有了mkfs.jffs2的工具。注意:這個工具不同於mkfs.ext2工具,它只能製作相應的JFFS2文件系統的鏡像,而不具有進行格式化的功能,而mkfs.ext2具備這以上兩種功能。然後用這個工具就可以製作JFFS2文件系統的鏡像了。

2、製作JFFS2文件鏡像

實驗平台用到的nand flash 是K9F1208,在製作鏡像過程添加的參數需要和它對應。

farsight#mkfs.jffs2 -r
/source/rootfs -o rootfs.jffs2 -e 0x4000 --pad=0x800000 -n

這樣就會生成一個8M大小的rootfs.jffs2的鏡像,它也正是JFFS2文件系統的鏡像,關於這個命令行里的選項的內容,可以用man
a mkfs.jffs2命令來查看內容。

JFFS2
維護了幾個鏈表來管理擦寫塊,根據擦寫塊上的內容,一個擦寫塊會在不同的鏈表上。具體來說,當一個擦寫塊上都是合法(valid)的節點時,它會在 clean_list
上;當一個擦寫塊包含至少一個過時(obsolete)的節點時,它會在 dirty_list 上;當一個擦寫塊被擦寫完畢,並被寫入 CLEANMARKER 節點後,它會在
free_list 上。而當你在掛載這個文件系統的時候,如果出現CLEANMARKER node found at 0x0042c000 has totlen
0xc != normal 0x0的警告的時候,可以加一個「-n」的選項,這個主要是由於針對Nand
Flash不需要在每個擦除塊的開始寫入CLEANMARKER 節點。

3、設置內核啟動參數

本處用的bootloader是U-BOOT.所以在U-BOOT的命令終端設置如下:

FS2410#setenv bootargs
root=/dev/mtdblock/2 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc
mem=64M

4、配置內核支持JFFS2文件系統

File Systems --->
Miscellaneous filesystems --->

<*>JournallingFlash File
System v2 (JFFS2) support

[*]JFFS2write-bufferingsupport

[*]

[*]JFFS2ZLIBcompressionsupport

[*]JFFS2RTIMEcompressionsupport

[*] JFFS2 RUBIN compression
support

5、下載rootfs.jffs2鏡像

下載到Nand
Flash第二個分區。

FS2410#nand erase 200000
800000

FS2410#nand write.jffs2 300008000
200000 800000

這里說明下關於nand
flash操作的幾個常用命令的含義

nand write:向Nand
Flash寫入數據,如果NandFlash相應的區域有壞塊,則直接報錯。

nand write.jffs2:向Nand
Flash寫入數據,如果NandFlash相應的區域有壞塊,可以跳過壞塊。

nand read:讀取Nand
Flash相應區域的數據,如果NandFlash相應的區域有壞塊,則直接報錯。

nand read.jffs2s:讀取Nand
Flash相應區域的數據,如果NandFlash相應的區域有壞塊,將對應壞塊區域的緩沖填充0xff,然後跳過此壞塊繼續讀取。

nand read.jffs2:讀取Nand
Flash相應區域的數據,如果NandFlash相應的區域有壞塊,直接跳過壞塊。

具體的參考代碼參看U-BOOT源碼:common/cmd_nand.c文件。

下載完JFFS2文件系統鏡像後,需要把Linux內核NandFlash的驅動關於第二個分區的大小改為8M(和鏡像一樣大),否則會出現類似如下錯誤:

Freeing init memory:
124K

Warning: unable to open an initial
console.

Argh. Special inode #171 with mode
0xa1ff had more than one node

Kernel panic: No init found. Try
passing init= option to kernel.

Argh. Special inode #63 with mode
0xa1ff had more than one node

Returned error for crccheck of ino
#63. Expect badness...

Argh. Special inode #67 with mode
0xa1ff had more than one node

Returned error for crccheck of ino
#67. Expect badness...

Argh. Special inode #68 with mode
0xa1ff had more than one node

到此,一個JFFS2文件系統的鏡像製作成功。可以啟動系統並測試JFFS2的性能了

還有一種製作JFFS2文件系統鏡像的方法,在製作鏡像的參數中可以不加—pad選項,過程如下:

farsight#mkfs.jffs2 -r
/source/rootfs -o rootfs.jffs2 -e 0x4000 -n

啟動開發板燒寫rootfs.jffs2鏡像

FS2410#nand erase 200000
800000//(注意把整個存放文件系統的分區全部給擦除)。

FS2410#nand write.jffs2 30008000
200000 31a28c//(必須是rootfs.jffs2的實際大小。如果是你寫成了4M,那麼分區的其餘部分JFFS2文件系統將無法識別)。

⑷ 電腦fastsearch是什麼軟體可以卸載嗎

不可以。FastSearch是基於windows系統使用的一款本地文件搜索工具。它具有界面整潔美觀、搜索強大快速的特點,能夠根據用戶選擇目錄、內容、正則表達式匹配及文件過濾。

在最短的時間內獲取到NTFS磁碟上的所有文件格式,包括txt、js、css、xml、cs、java、html、mp4、gif、app、docx、ppt等,不可卸載。

fastsearch運行於Windows系統中

沒看運用於其他操作系統,也說明他的專一。fastsearch基於windows文件夾的名稱、文件的快速搜索引擎,在搜索之前會把所用的文件夾和文件都一一列出來,和常規的搜索引擎不一樣就在這個地方。

與Windows自帶的搜索系統有很大不同,所以很多人稱之為「FastSearch」。在搜索框輸入文字,它只顯示過濾後的文件和目錄,這一功能具有很大優勢。

⑸ centos6.5安裝到U盤出問題

usblinux 把linux系統安裝到u盤里

加電
BIOS 找啟動方式,找設備
MBR
grub
vmlinux initrd
產生init
/etc/inittab -->找到應該啟動的級別
按照不同的級別啟動不同類型的服務 /etc/rcX.d/
/etc/rc.sysinit
/etc/rc.local
產生終端 可以登錄

ls /root/install.log

livecd 不用安裝,直接可以使用系統的CD,DVD

回顧開機啟動的過程:

開機-->bios(配置主板的程序,basic input and output system,加電自檢,找到啟動設備的編號)-->找到mbr(master bootloader record,它是屬於硬碟的0磁碟0扇區)-->grub-->通過grub找到vmlinuz和initrd(驅動硬體)--> 內核啟動,產生init進程-->/etc/inittab(確定系統的啟動級別)-->/etc/rc.sysinit(獲取主機的網路環境和主機類型,測試與載入設備,是否啟動selinux,模塊的載入,設置系統時間.................)-->/etc/rc.local

與USB有關的模塊
[root@li ~]# lsmod |grep ci
uhci_hcd 25421 0
ohci_hcd 24553 0
ehci_hcd 33869 0

--因為U盤分區在windows下不認,所以我這里兩G的U盤,直接都用來做usblinux

1,首先刪除U盤里原有分區

第一種:用fdisk /dev/sdb,然後用d命令去刪除

第二種:dd if=/dev/zero of=/dev/sdb bs=1024 count=1 --刪除磁碟分區信息

重新按照規劃的去分區:
Disk /dev/sdb: 2000 MB, 2000570368 bytes
62 heads, 62 sectors/track, 1016 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 763 1466455 83 Linux
/dev/sdb2 764 1016 486266 82 Linux swap / Solaris

Command (m for help): w

--或者分為1G做usblinux,500m做swap,500m留給fat32
Disk /dev/sdb: 2000 MB, 2000570368 bytes
62 heads, 62 sectors/track, 1016 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 509 978267 83 Linux
/dev/sdb2 510 764 490110 82 Linux swap / Solaris
/dev/sdb3 765 1016 484344 b W95 FAT32

Command (m for help): w

[root@li ~]# partprobe

--有些U盤報kerenl相關的兩到三段信息,就不要使用多分區,就分一個分區。

2,格式化分區,並掛載

[root@li www]# partprobe --fdisk分區後,都要用此命令刷新

--這一步,有很多U盤會報錯,如果報錯的話最好去windows虛擬機下全格一下,再重新在linux下來做

[root@li www]# mkfs -t ext3 /dev/sdb1
[root@li www]# mkswap /dev/sdb2

[root@li www]# mkdir /usb
[root@li www]# mount /dev/sdb1 /usb/ --建立一個目錄,掛載/dev/sdb1

3,安裝基本的目錄結構

准備光碟iso文件,掛載到一個目錄去
[root@li www]# mount /share/iso/rhel-5.4-server-i386-dvd.iso /yum/ -o loop

[root@li www]# cd /yum/Server/

[root@li Server]# rpm -qip filesystem-2.4.0-2.i386.rpm
Description :
filesystem 軟體包是安裝在紅帽 Linux 系統上的一個基本
軟體包。filesystem 含有一個 Linux 操作系統的基本目錄布局,
包括各目錄的正確許可許可權。

要使用--nodeps脫離依賴性才可以安裝
[root@li Server]# rpm -ivh --root=/usb/ --nodeps filesystem-2.4.0-2.i386.rpm

或者先裝setup包,再裝filesystem包
[root@li ~]# rpm -ivh --root=/usb /share/yum/Server/setup-2.5.58-7.el5.noarch.rpm
[root@li ~]# rpm -ivh --root=/usb /share/yum/Server/filesystem-2.4.0-2.i386.rpm

[root@li ~]# ls /usb --一個基本的目錄布局就已經裝好了
bin etc lost+found opt sbin sys var
boot home media proc selinux tmp
dev lib mnt root srv usr

4,安裝相應的軟體包,也就是定製功能

下面最主要的一步就是安裝系統的軟體包,首先要思考安裝的這個USB系統需要什麼功能,比如最基本的命令ls,cd等

這里可以選擇使用busybox(是一個基本命令工具集),但如果對其不是特別熟悉,還是按基本命令一個一個的來選

首先要裝bash包,包含50多個內部命令
[root@dns Server]# chroot /usb --不裝bash無法 chroot進去
chroot: cannot run command `/bin/bash': No such file or directory

[root@dns Server]# rpm -qf /bin/ls
coreutils-5.97-23.el5

[root@dns Server]# rpm -qf `which vi`
vim-minimal-7.0.109-6.el5

[root@dns Server]# rpm -qf `which vim`
vim-enhanced-7.0.109-6.el5

[root@dns Server]# rpm -qf `which ping`
iputils-20020927-46.el5

[root@dns Server]# rpm -qf `which mount`
util-linux-2.13-0.52.el5

[root@dns Server]# rpm -qf `which tar`
tar-1.15.1-23.0.1.el5

[root@dns Server]# rpm -qf `which rpm`
rpm-4.4.2.3-18.el5

[root@dns Server]# rpm -qf `which man`
man-1.6d-1.1

[root@dns Server]# rpm -qf `which ssh`
openssh-clients-4.3p2-36.el5

[root@dns Server]# rpm -qf `which awk`
gawk-3.1.5-14.el5

[root@dns Server]# rpm -qf `which sed`
sed-4.1.5-5.fc6

[root@dns Server]# rpm -qf `which grep`
grep-2.5.1-55.el5

[root@dns Server]# rpm -qf `which find`
fintils-4.2.27-6.el5

[root@dns Server]# rpm -qf `which locate`
mlocate-0.15-1.el5.2

[root@dns Server]# rpm -qf `which useradd`
shadow-utils-4.0.17-14.el5

[root@dns Server]# rpm -qf `which passwd`
passwd-0.73-1

[root@dns Server]# rpm -qf `which init`
SysVinit-2.86-15.el5

[root@dns Server]# rpm -qf `which clear`
ncurses-5.5-24.20060715

[root@dns Server]# rpm -qf `which ps`
procps-3.2.7-11.1.el5

[root@dns Server]# rpm -qf /usr/bin/which
which-2.16-7

[root@dns Server]# rpm -qf `which ifconfig`
net-tools-1.60-78.el5

[root@dns Server]# rpm -qf `which fdisk`
util-linux-2.13-0.52.el5

[root@dns Server]# rpm -qf `which partprobe`
parted-1.8.1-23.el5

[root@li ~]# rpm -qf `which showmount`
nfs-utils-1.0.9-42.el5

[root@li ~]# rpm -qf `which service`
initscripts-8.45.30-2.el5

[root@li Server]# rpm -qf `which bzip2`
bzip2-1.0.3-4.el5_2

[root@li Server]# rpm -qf `which gzip`
gzip-1.3.5-10.el5

--經過上面對基本命令的包查找,最終安裝下列這些基本包
[root@dns Server]# yum install --installroot=/usb bash coreutils vim-minimal vim-enhanced iputils util-linux tar rpm man openssh-clients gawk sed grep fintils mlocate shadow-utils passwd SysVinit ncurses procps which net-tools util-linux parted nfs-utils initscripts bzip2 gzip

--如果上面步驟安裝完後,有忘記安裝的包,再使用yum裝不上去
[root@li ~]# yum install --installroot=/usb iptables
Loaded plugins: downloadonly, rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
No package iptables available.
Nothing to do

--所以再安裝的話使用rpm去安裝
[root@li ~]# rpm -ivh --root=/usb /share/yum/Server/iptables-1.3.5-5.3.el5.i386.rpm

5,安裝啟動引導文件和模塊

[root@li Server]# chroot /usb --使用此命令,就是以/usb目錄為根目錄了

bash-3.2# ls /boot/ --可以看到現在usblinux里的/boot目錄沒有任何文件

bash-3.2# exit --用exit退出chroot模式
exit

[root@li ~]# cp /etc/skel/.bash* /usb/root/ -rf
--拷環境變數模版過去

定製支持usb存儲啟動的ramdisk(initrd文件)
[root@li Server]# mkinitrd --with usb_storage /usb/boot/initrd.img `uname -r`

從真機上拷貝vmlinuz到usblinux對應目錄
[root@li Server]# cp /boot/vmlinuz-2.6.18-164.el5 /usb/boot/vmlinuz

從真機上拷貝內核模塊到usblinux對應目錄
[root@li Server]# cp /lib/moles/2.6.18-164.el5/ /usb/lib/moles/ -rf

拷內核源碼,可選步驟
[root@li Server]# mkdir /usb/usr/src/kernels/
[root@dns Server]# cp /usr/src/kernels/2.6.18-164.el5-i686/ /usb/usr/src/kernels/ -rf

6,安裝並手動寫grub
--如果是用真實機分區來代替U盤做usblinux的話,這一步不用做,只需要把這個分區的引導信息加入到真實機的配置文件里就可以了

安裝grub包,用--nodeps脫離依賴性
[root@li Server]# rpm -ivh --nodeps --root=/usb grub-0.97-13.5.i386.rpm

--脫離依賴安裝,會沒有splash.xpm.gz圖片,可以從真機拷一個

也可以按下面安裝
[root@li ~]# rpm -ivh --root=/usb /share/yum/Server/*logos*
warning: /share/yum/Server/redhat-logos-4.9.16-1.noarch.rpm
[root@li ~]# rpm -ivh --root=/usb /share/yum/Server/grub-0.97-13.5.i386.rpm

--但這樣安裝完後,grub目錄下只有一個背景圖片

[root@dns Server]# ls /usb/boot/grub/
splash.xpm.gz

grub-install安裝到/dev/sdb
[root@li Server]# grub-install --root-directory=/usb --recheck /dev/sdb

--如果是用真實機分區來做的話,這里/dev/sdb改成/dev/sda

--grub-install之後,grub目錄的基本文件就有了(除了配置文件grub.conf)
[root@dns Server]# ls /usb/boot/grub/
device.map iso9660_stage1_5 splash.xpm.gz vstafs_stage1_5
e2fs_stage1_5 jfs_stage1_5 stage1 xfs_stage1_5
fat_stage1_5 minix_stage1_5 stage2
ffs_stage1_5 reiserfs_stage1_5 ufs2_stage1_5

修改device.map
[root@li Server]# vim /usb/boot/grub/device.map
(hd0) /dev/sdb

--如果是用真實機分區來做的話,這里/dev/sdb改成/dev/sda

手動寫grub.conf文件
--下面是以u盤來做的寫法
[root@li Server]# vim /usb/boot/grub/grub.conf

default=0
timeout=-1

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title usblinux
root (hd0,0)
kernel /boot/vmlinuz ro root=/dev/sdb1
initrd /boot/initrd.img

=============================================

--因為我這次是使用真實機的/dev/sda14來做根./dev/sda15做swap

上面的第6步不用做,只做這一小段就好了

所以把下面這段加到真實機的/boot/grub/grub.conf里

title usblinux
root (hd0,13) --因為我模擬的這個usblinux的根為sda14,所以這里寫13
kernel /boot/vmlinuz ro root=/dev/sda14
initrd /boot/initrd.img

# grub-install /dev/sda --加完後,就grub-install安裝一下

--------------------------------------------------

7,拷貝密碼文件,拷貝環境變數

--這一步可以不拷,因為現在usblinux上默認有passwd和group文件,沒有shadow和gshadow
--裡面默認有root用戶和系統用戶
[root@li Server]# cp /etc/passwd /usb/etc/passwd

[root@li Server]# chroot /usb/ --再次chroot到/usb目錄,提示符就變了

[root@li /]# pwconv --同步/etc/passwd和/etc/shadow
[root@li /]# grpconv --同步/etc/group和/etc/gshadow
[root@li /]# passwd root --修改root的密碼,到時候登錄需要

8,手動編寫fstab文件

[root@li /]# vim /etc/fstab --注意這里是usblinux系統里的fstab,因為已經chroot進來了

/dev/sdb1 / ext3 defaults 0 0
/dev/sdb2 swap swap defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0

--用真實機的/dev/sda14來做根./dev/sda15做swap的話,就把上面的sdb1換成sda14,sdb2換成sda15,其它的不變

9,讓usblinux支持網路

從真機拷貝eth0的配置文件到usblinux對應目錄中:

[root@li Server]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /usb/etc/sysconfig/network-scripts/

修改網路配置文件,可以改成靜態IP
[root@li Server]# vim /usb/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

從真機拷貝全局網路配置文件到usblinux對應目錄中
[root@li Server]# cp /etc/sysconfig/network /usb/etc/sysconfig/

從真機拷貝modprobe.conf到usblinux對應目錄中
[root@li Server]# cp /etc/modprobe.conf /usb/etc/
alias eth0 8139too --注意這一句在不同的系統里可能要修改,現在這里的網卡模塊是8139too,所以這里是8139too就可以;這個在虛擬機里為pcnet32

然後重啟系統,在bios選擇使用usb引導進入系統,去驗證功能

--如果是真實機分區做的,就不用改bios,直接在grub選擇菜單選擇usblinux引導進入就可以了

-------------------------------------------------------------

上面的步驟里還沒有去加的功能有 動態獲取IP (需要安裝dhclient包)
沒有yum命令,沒有圖形界面 (有需要的話,自己使用rpm安裝yum命令後,使用yum安裝圖形包的兩個組)

啟動時有大量無用信息, 可以在grub.conf里加rhgb quiet來解決

但重啟後還會有一個錯誤信息:
(會有一個usb_storage的報錯信息,但此信息沒有影響,是mkinitrd --with usb_storage時造成的)

如果一定要除掉這句報錯,可以手工修改initrd文件

# cd /tmp
# cp /usb/boot/initrd.img /tmp/initrd.img.gz
# gunzip initrd.img.gz
# cpio -i --make-directories < initrd.img
# rm initrd.img
# vim init --打開,刪除以下的幾行
echo "loading usb-storage.ko mole"
insmod /lib/usb-storage.ko
echo waiting for dirver initialization
stabilized /proc/bus/usb/devices
echo waiting for driver initializtin

# find . | cpio -c -o > ../initrd.img
# gzip -9 ../initrd.img
# cp ../initrd.mg.gz /usb/boot/initrd.img

=============================================================

⑹ Linux伺服器租用需要慎用的幾個命令

租用。。。
沒啥慎用的

⑺ 如何利用源代碼在Banana Pi上安裝最小的Debian

1.配置lubuntu主機,使其通過網路連接Banana Pi。
a.在lubuntu主機上,分配一個固定的IP地址到乙太網介面(例如,eth0)
#為eth0定義一個靜態IP
sudo vi /etc/network/interfaces

auto lo eth0

iface lo inet loopback

iface eth0 inet static

address 192.168.8.1

netmask 255.255.255.0
復制代碼
# 重新啟動介面
sudo ifup eth0
復制代碼
b.在lubuntu主機上,設置dhcp伺服器eth0介面
# 安裝dhcp伺服器
sudo apt-get install isc-dhcp-server
復制代碼
# 定義dhcp伺服器的操作介面 (eth0)
sudo vi /etc/default/isc-dhcp-server

INTERFACES=」eth0″
復制代碼
# 配置一個基本的dhcp服務
sudo vi /etc/dhcp/dhcpd.conf

subnet 192.168.8.0 netmask 255.255.255.0 {

range 192.168.8.16 192.168.8.127;

# hard-wired OpenDNS name server for basic setup

option domain-name-servers 208.67.222.222;

option routers 192.168.8.1;

}

# host banana always gets a fixed IP address

host banana {

fixed-address 192.168.8.8;

}
復制代碼
# 重啟dhcp服務
sudo service isc-dhcp-server restart
復制代碼
c.在lubuntu主機上,設置一個乙太網介面到網際網路之間的橋接
# 使數據包在ufw中轉發
# 在/etc/ufw/sysctl.conf中 取消下面兩行命令的注釋:
sudo vi /etc/ufw/sysctl.conf

net.ipv4.ip_forward=1
復制代碼
# 在/etc/default/ufw中把DEFAULT_FORWARD_POLICY 改為 「ACCEPT」 :
sudo vi /etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"
復制代碼
# 偽裝: 在/etc/ufw/before.rules中,頭注釋之後,添加以下內容:
sudo vi /etc/ufw/before.rules

# NAT rules (IP Masquerading)

*nat

:POSTROUTING ACCEPT [0:0]

#Forward traffic from eth0 range 192.168.8.xxx to wlan0

-A POSTROUTING -s 192.168.8.0/24 -o wlan0 -j MASQUERADE

# 'COMMIT' the above nat table rules for processing

COMMIT

復制代碼
# 重啟ufw 服務:
sudo ufw disable && sudo ufw enable
復制代碼
2.在lubuntu主機上創建u-boot, script.bin 和banana-pi linux-kernel
a. 在lubuntu主機上安裝一個交叉編譯器工具鏈
sudo apt-get install build-essential u-boot-tools uboot-mkimage binutils-arm-linux-gnueabihf gcc-4.6-arm-linux-gnueabihf-base g++-4.6-arm-linux-gnueabihf gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf libusb-1.0-0 libusb-1.0-0-dev git wget fakeroot kernel-package zlib1g-dev libncurses5-dev
復制代碼
b. 創建u-boot (u-boot-bananapi或者u-boot-sunxi-with-spl.bin)
git clone -b bananapi https://github.com/LeMaker/u-boot-bananapi.git

cd u-boot-bananapi

make CROSS_COMPILE=arm-linux-gnueabihf- Bananapi_config

make CROSS_COMPILE=arm-linux-gnueabihf-

cd ..
復制代碼
c. 創建script.bin
git clone https://github.com/LeMaker/sunxi-tools.git

git clone https://github.com/LeMaker/sunxi-boards.git

cd sunxi-tools

make
復制代碼
#最後修改板子的配置文件: (SKIPPED HERE)
vi sys_config/a20/Bananapi.fex

cd ..

sunxi-tools/fex2bin sunxi-boards/sys_config/a20/Bananapi.fex script.bin
復制代碼
d. 在linux-bananapi/ 中創建linux kernel
git clone -b bananapi-3.4 https://github.com/LeMaker/linux-bananapi.git

cd linux-bananapi/

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2 sun7i_defconfig
復制代碼
# 最後微調內核配置 (SKIPPED HERE)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
復制代碼
# 創建 linux-bananapi/arch/arm/boot/uImage (the '-j2' option executes make tasks on two cpus for faster processing)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2 uImage moles
復制代碼
# 在linuxbananapi/output/lib/moles/3.4.90+/中創建模塊
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output moles_install

cd ..
復制代碼
3. 設置可啟動的SD卡
假定SD卡在/dev/mmcblk0下,有一個空白的分區表而且未掛載. 至少4GB
a. 分區並格式化SD卡
#使用下面的命令對SD卡進行分區
sudo fdisk /dev/mmcblk0

Command (m for help): n

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): (enter)

Using default response p

Partition number (1-4, default 1): (enter)

Using default value 1

First sector (2048-xxxxx, default 2048): (enter)

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-xxxxx, default xxxxx): +20M

Command (m for help): n

Partition type:

p primary (1 primary, 0 extended, 3 free)

e extended

Select (default p): (enter)

Using default response p

Partition number (1-4, default 2): (enter)

Using default value 2

First sector (43008-xxxxx, default 43008): (enter)

Using default value 43008

Last sector, +sectors or +size{K,M,G} (43008-15523839, default 15523839): (enter)

Using default value xxxxx

Command (m for help): w

sudo sfdisk -R /dev/mmcblk0

sudo mkfs.ext2 /dev/mmcblk0p1

sudo mkfs.ext4 /dev/mmcblk0p2

復制代碼
b. 將bootloader, boot 腳本和內核映像加到boot分區
sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1k count=1023 seek=1

sudo sfdisk -R /dev/mmcblk0

sudo dd if=u-boot-bananapi/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

sudo mount /dev/mmcblk0p1 /mnt
復制代碼
# 創建bootloader腳本
sudo vi /mnt/boot.cmd

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait panic=10 disp.screen0_output_mode=EDID:1280x720p50 hdmi.audio=EDID:0

ext2load mmc 0 0x43000000 script.bin

ext2load mmc 0 0x48000000 uImage

bootm 0x48000000

sudo mkimage -C none -A arm -T script -d /mnt/boot.cmd /mnt/boot.scr
復制代碼
# 拷貝內核映像和banana配置腳本到SD卡
sudo cp linux-bananapi/arch/arm/boot/uImage /mnt

sudo cp sunxi-boards/script.bin /mnt

sudo umount /mnt
復制代碼
c.用debootstrap安裝一個debian wheezy 文件系統
#在lubuntu主機上設置debootstrap
sudo mount /dev/mmcblk0p2 /mnt

sudo apt-get install qemu-user-static debootstrap binfmt-support

rootdir=/mnt

dist=wheezy

sudo debootstrap --arch=armhf --foreign $dist $rootdir
復制代碼
#准備把chroot放到/mnt中
sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/

sudo cp /etc/resolv.conf /mnt/etc/
復制代碼
# 把chroot放到/mnt中,然後安裝debootstrap
sudo chroot /mnt

dist=wheezy

export LANG=C

/debootstrap/debootstrap –second-stage
復制代碼
# 配置apt源
cat <<EOT > /etc/apt/sources.list

deb http://ftp.uk.debian.org/debian $dist main contrib non-free

deb-src http://ftp.uk.debian.org/debian $dist main contrib non-free

deb http://ftp.uk.debian.org/debian $dist-updates main contrib non-free

deb-src http://ftp.uk.debian.org/debian $dist-updates main contrib non-free

deb http://security.debian.org/debian-security $dist/updates main contrib non-free

deb-src http://security.debian.org/debian-security $dist/updates main contrib non-free

EOT

cat <<EOT > /etc/apt/apt.conf.d/71-no-recommends

APT::Install-Recommends "0";

APT::Install-Suggests "0";

EOT
復制代碼
# 更新安裝包然後將語系配置為en_US.UTF-8
apt-get update

dpkg-reconfigure locales
復制代碼
# 在提示信息中均選擇en_US.UTF-8 export LANG=en_US.UTF-8
# 安裝一個ssh伺服器使之可以通過網路安全登錄, 並且可以自動設置日期和時間 (可選)
apt-get install openssh-server ntpdate
復制代碼
# 更改root 密碼
passwd
復制代碼
# 查看/etc/ssh/sshd_config中以下選項並設置為yes: (注意,第一次登錄的時候, 最好設置一個用戶賬戶並通過設置選項為no禁用root許可權)
vi /etc/ssh/sshd_config

PermitRootLogin yes
復制代碼
# 更改banana pi的主機名 vi /etc/hostname
banana
復制代碼
# 在/etc/dhcp/dhclient.conf 中,將下列行添加上或者取消注釋以使banana識別lubuntu主機上的DHCP服務
vi /etc/dhcp/dhclient.conf

send host-name = gethostname();
復制代碼
# 基於eth0進行自動dhcp連接
vi /etc/network/interfaces

auto lo eth0

iface lo inet loopback

allow-hotplug eth0

iface eth0 inet dhcp
復制代碼
# 確保必要的時候串列控制台重新生成
echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> /etc/inittab
復制代碼
#在退出chroot之前終止ssh服務然後清除rootfs
/etc/init.d/ssh stop
復制代碼
退出
sudo rm /mnt/usr/bin/qemu-arm-static /mnt/etc/resolv.conf
復制代碼
d. 把kernel模塊拷貝到rootfs
sudo mkdir -p /mnt/lib/moles

sudo rm -rf /mnt/lib/moles/

sudo cp -r linux-bananapi/output/lib/ /mnt/

sudo umount /mnt
復制代碼
4. 給BananaPi供電
a. 連接banana pi
# 將banana pi的 usb/OTG 口連接到 lubuntu 主機的USB口或者直接利用適配器供電
# 在lubuntu主機和banana pi (ssh登錄)之間連接乙太網網線
# 最後在banana pi和lubuntu主機(控制台) 之間連接一個 USB-TTL 串列線
# 把SD卡插入Banana Pi
b. 給banana-pi供電
# 按下電源按鈕
# 等待綠色LED燈閃爍 (幾秒之後)
# 等待乙太網介面啟動(乙太網連接器下的黃色LED燈)
c. 通過ssh登錄

熱點內容
cwebservice文件上傳 發布:2024-11-08 09:09:18 瀏覽:583
王牌戰爭有沒有什麼和平的伺服器 發布:2024-11-08 09:01:36 瀏覽:374
centos7刪除文件夾 發布:2024-11-08 09:00:58 瀏覽:990
伺服器可以分成多個獨立的電腦嗎 發布:2024-11-08 08:56:15 瀏覽:202
如何運行gcc編譯的文件 發布:2024-11-08 08:51:49 瀏覽:498
javaztree 發布:2024-11-08 08:50:55 瀏覽:510
蘋果手機怎麼能玩安卓版騰訊游戲 發布:2024-11-08 08:50:55 瀏覽:523
ftp推送 發布:2024-11-08 08:49:46 瀏覽:751
linuxarm版 發布:2024-11-08 08:48:28 瀏覽:544
tar解壓覆蓋 發布:2024-11-08 08:46:20 瀏覽:727