mkfs源码
⑴ 如何交叉编译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登录