mkfs源码

问题描述:如何交叉编译mkfs.jffs2等工具链mtd-utils 大家好,小编为大家解答metamask源码分析的问题。很多人还不知道mmkv源码分析,现在让我们一起来看看吧!

如何在nand flash上实现JFFS2根文件文件系统

mkfs源码的相关图片

首先说明一下:

在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_dump。

| |-- flash_otp_info。

| |-- flash_unlock。

| |-- flashcp。

| |-- ftl_check。

| |-- ftl_format。

| |-- jffs2dump。

| |-- mkbootenv。

| |-- mkfs.jffs2。

| |-- mkpfi

| |-- mtd_debug。

| |-- nand2bin。

| |-- nanddump。

| |-- nandtest。

| |-- nandwrite。

| |-- nftl_format。

| |-- nftldump。

| |-- pddcustomize。

| |-- pfi2bin。

| |-- pfiflash。

| |-- recv_image。

| |-- rfddump。

| |-- 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。

# hexdump 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;hexdump 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

如何利用源代码在Banana Pi上安装最小的Debian的相关图片

如何利用源代码在Banana Pi上安装最小的Debian

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。

[*]AdvancedcompressionopTIonsforJFFS2。

[*]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是什么软件可以卸载吗?

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 modules 。

复制代码

# 在linuxbananapi/output/lib/modules/3.4.90+/中创建模块。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_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/modules 。

sudo rm -rf /mnt/lib/modules/ 。

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登录

centos6.5安装到U盘出问题的相关图片

centos6.5安装到U盘出问题

不可以。FastSearch是基于windows系统使用的一款本地文件搜索工具。它具有界面整洁美观、搜索强大快速的特点,能够根据用户选择目录、内容、正则表达式匹配及文件过滤。

在最短的时间内获取到NTFS磁盘上的所有文件格式,包括txt、js、css、xml、cs、java、html、mp4、gif、app、docx、ppt等,不可卸载。

fastsearch运行于Windows系统中。

没看运用于其他操作系统,也说明他的专一。fastsearch基于windows文件夹的名称、文件的快速搜索引擎,在搜索之前会把所用的文件夹和文件都一一列出来,和常规的搜索引擎不一样就在这个地方。

与Windows自带的搜索系统有很大不同,所以很多人称之为“FastSearch”。在搜索框输入文字,它只显示过滤后的文件和目录,这一功能具有很大优势。

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`。

findutils-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 findutils 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/modules/2.6.18-164.el5/ /usb/lib/modules/ -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 module"。

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 。

=============================================================。

原文地址:http://www.qianchusai.com/mkfs%E6%BA%90%E7%A0%81.html

联咏96675规格书,联咏96658说明书

联咏96675规格书,联咏96658说明书

大学生救掏粪老人作文,为救老人掉进粪池的大学生

大学生救掏粪老人作文,为救老人掉进粪池的大学生

快乐的春游作文400字三年级,快乐的春游作文400字三年级上册

快乐的春游作文400字三年级,快乐的春游作文400字三年级上册

lw/环保作品废物利用简单,环保作品废物利用制作视频

lw/环保作品废物利用简单,环保作品废物利用制作视频

情深相负不许来生,情深相负不许来生什么意思

情深相负不许来生,情深相负不许来生什么意思

想象作文的结尾怎么写才好,想象作文的结尾怎么写才好看

想象作文的结尾怎么写才好,想象作文的结尾怎么写才好看

七年级下册语文作文600,七年级下册语文作文600字左右优秀作

七年级下册语文作文600,七年级下册语文作文600字左右优秀作

588挖矿bios,588挖矿功耗多少

588挖矿bios,588挖矿功耗多少

zr19和r19的区别,轮胎zr19和r19有什么区别

zr19和r19的区别,轮胎zr19和r19有什么区别

放学十分钟作文,放学前的几分钟作文

放学十分钟作文,放学前的几分钟作文