Busybox文件系统的移植
相关软件下载地址:http://pan.baidu.com/s/16yo8Y
fsc100开发板
交叉编译器:arm-cortex_a8-linux-gnueabi-gcc
busybox-1.17.3.tar.bz2
一、根文件系统制作
1、 源码下载
我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:
2、 解压源码
$ tar xvf busybox-1.17.3.tar.bz2
3、 进入源码目录
$ cd busybox-1.17.3
4、 配置源码
$ make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
[ ] Force NOMMU build
[ ] Build with Large File Support (for accessing files > 2 GB)
(arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix
() Additional CFLAGS
5、 编译
$ make
6、 安装
busybox默认安装路径为源码目录下的_install
$ make install
7、 进入安装目录下
$ cd _install
$ ls
bin linuxrc sbin usr
8、 创建其他需要的目录
$ mkdir dev etc mnt proc var tmp sys root
9、 添加库
- 将工具链中的库拷贝到_install目录下
$ cp /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib ./ -a
- 删除静态库和共享库文件中的符号表
$ rm lib/*.a
$ arm-cortex_a8-linux-gnueabi-strip lib/*
- 删除不需要的库,确保所有库大小不超过4M
$ rm lib/libstdc++*
$ du -mh lib/
10、 添加系统启动文件
在etc下添加文件inittab,文件内容如下:
#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# stuff to do when restarting the init process
::restart:/sbin/init
# stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
在etc下添加文件fstab,文件内容如下:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
这里我们挂载的文件系统有三个proc、sysfs和tmpfs。在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持
修改内核配置:
File systems --->
Pseudo filesystems --->
[*] Virtual memory file system support (former shm fs)
[*] Tmpfs POSIX Access Control Lists
重新编译内核
在etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:
#!/bin/sh
# This is the first script called by init process
/bin/mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
为rcS添加可执行权限:
$ chmod +x init.d/rcS
在etc下添加profile文件,文件内容为:
#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
11、 设备文件创建
根文件系统中有一个设备节点是必须的,在dev下创建console节点
$ sudo mknod dev/console c 5 1
重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件
二、NFS测试
1、删除原先的/source/rootfs
$ sudo rm -rf /source/rootfs
2、将我们新建的根文件系统拷贝到/source/rootfs目录下
$sudo mkdir /source/rootfs
$ sudo cp _install/* /source/rootfs –a
3、设置uboot环境变量
# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=nfs nfsroot=192.168.1.100:/source/rootfs init=/linuxrc console=ttySAC0,115200 ip=192.168.1.200
# saveenv
重新启动开发板,查看是否能够正常挂载,功能是否正常
三、制作ramdisk文件系统
通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:
1、制作一个大小为8M的镜像文件
$ cd ~
$ dd if=/dev/zero of=initrd.img bs=1k count=8192 (initrd.img为8M)
2、格式化这个镜像文件为ext2
$ mkfs.ext2 -F initrd.img
3、在mount下面创建initrd目录作为挂载点
$ sudo mkdir /mnt/initrd
4、将这个磁盘镜像文件挂载到/mnt/initrd下
注意这里的initrd.img不要和ubuntu根目录下的initrd.img弄混了,同时initrd.img不能存放在rootfs目录中
$ sudo mount -t ext2 -o loop initrd.img /mnt/initrd
5、将我们的文件系统复制到initrd.img中
将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面
$ sudo cp /source/rootfs/* /mnt/initrd –a
6、卸载initrd
$ sudo umount /mnt/initrd
7、压缩initrd.img为initrd.img.gz并拷贝到/tftpboot下
$ gzip --best -c initrd.img > initrd.img.gz
$ cp initrd.img.gz /tftpboot
8、配置内核支持RAMDISK
制作完 initrd.img.gz后,需要配置内核支持RAMDISK作为启动文件系统
Device Drivers
SCSI device support --->
<*> SCSI disk support
Block devices --->
<*>RAM block device support
(1)Default number of RAM disks
(8192) Default RAM disk size (kbytes) (修改为8M)
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
重新编译内核,复制到/tftpboot
9、在U-BOOT命令行重新设置启动参数:
# setenv bootcmd tftp 20008000 zImage \; tftp 20800000 initrd.img.gz \; go 20008000
# setenv bootargs root=/dev/ram rw init=/linuxrc initrd=0x20800000,8M console=ttySAC0,115200
# saveenv
重新启动开发板查看能否正常启动
四、制作cramfs文件系统
1、cramfs文件系统镜像制作
由于系统提供制作cramfs文件系统的工具,可以直接使用。具体操作如下;
$ mkfs.cramfs /source/rootfs rootfs.cramfs
2、将rootfs.cramfs拷贝到/tftpboot目录下
$ sudo cp rootfs.cramfs /tftpboot
3、将rootfs.cramfs烧写到nand flash的第三个分区上
u-boot下执行如下命令
# tftp 20008000 rootfs.cramfs
# nand erase 400000 400000
# nand write 20008000 400000 400000
4、重新设置u-boot启动参数
# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
# saveenv
启动开发板,测试是否成功。
[root@farsight /root] # ls /
bin etc linuxrc sbin tmp var
dev lib mnt proc test usr
[root@farsight /root] # mkdir test
mkdir: Cannot create directory `test': Read-only file system
注意:cramfs格式的文件系统是只读的。
五、制作jffs2文件系统
1、配置内核支持jffs2文件系统
File systems --->
[*] Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
重新编译内核并拷贝到/tftpboot下
2、zlib的编译
解压zlib-1.2.3.tar.bz2并进入zlib-1.2.3配置编译安装
$ tar xvf zlib-1.2.3.tar.bz2
$ cd zlib-1.2.3
$ ./configure
$ make
$ sudo make install
3、mtd工具编译
解压mtd-snapshot-20050519.tar.bz2 并进入mtd/util编译安装
$ tar xvf mtd-snapshot-20050519.tar.bz2
$ cd mtd/util
$ make
$ sudo make install
这样我们的系统里就有了mkfs.jffs2这个工具了
4、jffs2文件系统镜像制作
$ mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x20000 --pad=0x400000 -n
$ sudo cp rootfs.jffs2 /tftpboot
5、jffs2文件系统烧写
# tftp 20008000 rootfs.jffs2
# nand erase 400000 400000
# nand write 20008000 400000 400000
6、设置u-boot启动参数
# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=/dev/mtdblock2 rootfstype=jffs2 rw init=/linuxrc
console=ttySAC0,115200
# saveenv
重新启动开发板,查看是否成功
Busybox文件系统的移植的更多相关文章
- 基于s5pv210嵌入式系统busybox文件系统移植
基于s5pv210嵌入式系统busybox文件系统移植 1.下载源码 busybox.net/downloads下载最新版的busybox源码,最新源码为1.21.1 2.解压源码文件 tar xvf ...
- JFFS2文件系统的移植
Linux文件系统的移植-JFFS2 JFFS2是JFFS的后继者,由Red Hat重新改写而成.JFFS2的全名为JournallingFlash File System Version 2(闪存日 ...
- 添加字体与字符集locale支持(基于busybox文件系统)
添加字体与字符集(基于busybox文件系统) 2011-10-11 14:07:32 分类: LINUX 1.添加字体 下面以文泉驿为例 $ mkdir -p rootfs/usr/share/ ...
- Linux3.4内核 Yaffs2文件系统的移植
作者:李老师,华清远见嵌入式学院讲师. [实验目的] Yaffs2文件系统是嵌入式系统中常用到的一种文件系统,是也是移植Android所必须的.通过向FS_S5PC100平台移植Yaffs文件系统,了 ...
- 【液晶模块系列基础视频】3.1.fatfs文件系统的移植及接口函数的使用
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...
- FatFs文件系统的移植
FatFs 的底层可以写一次命令,读写多个扇区.FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图: FatFs文件 ...
- 移植yaffs文件系统
需要下载yaffs2-d43e901.tar.gz,busybox-1.13.0.tar.bz2 使用的交叉编译器是4.33 1.修改配置编译busybox 修改Makefile CROSS_COMP ...
- Android移植busybox
Android 的toolbox没有自动补齐,命令少,对于开发人员还是需要busybox,直接移植官方的busybox会有很多问题,主要是因为基于Android的交叉编译工具并没有采用glibc作为C ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
随机推荐
- 使用SpringMVC时,web应用的资源路径问题
web应用常见的资源存方式 在WEB-INF下新建lib,存放要使用的jar包 在WEB-INF下新建jsp文件夹,存放jsp文件.首页除外,首页就放到web下. 在web下,或WEB-INF下,新建 ...
- NOI2019 选做
施工中-- 这里是一个同步赛选手,同步赛打铜了,下面内容来源于互联网,如有雷同敬请谅解-- d1t1 回家路线 d1t1 吐槽 本题首先数据范围出的有点水,其次数据有点水,导致这题真的成了签到题. 现 ...
- C++ Primer Plus 6 笔记(2)
第4章 1.求数组元素个数的一种方法:num=sizeof 数组名/sizeof (元素类型) 2.确定字符串所需的最短数组时,别忘了将结尾的'\0'计算在内.表面可以无,内存必须有. 3.'S'表示 ...
- Visual Studio中的“build”、“rebuild”、“clean”的区别
区别 rebuild基本相当于clean+build build只针对修改过的文件进行编译,rebuild会对所有文件编译(无论是否修改). clean 删除中间和输出文件,中间文件是指一些生成应用的 ...
- SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
[oracle@jtwy02 ~]$ sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.4.0 Production on Sat Oct 13 14:14: ...
- Day5-T4
原题目 Describe:最小生成树加权 code: #include<bits/stdc++.h> #define INF 214748364 #define eps 1e-9 #def ...
- RAM和ROM的区别
区别如下: 1.概念 RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序.ROM(Read-Only Memory)即 ...
- 程序员如何 10 分钟用 Python 画出蒙娜丽莎?
之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳.对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! 基本思路 ...
- MyBatis笔记(一)
MyBatis学习随笔 第一个MyBatis项目 创建项目 导入maven依赖,根据需要选择性添加mysql/oracle,spring,spring-mybatis等依赖,这里就不一一列出了 < ...
- 实验吧-杂项-pilot-logic、ROT-13变身了
1.pilot-logic 题上说password藏在文件里,直接丢到Winhex里,搜索pass就拿到flag了. 有的大佬提供了另一种方法,题上说是一个磁盘文件,有一个处理磁盘文件的软件autop ...