rootfs文件系统的制作(二)
一、根文件系统制作
1、 源码下载
我们选择的版本是busybox-1.22.1.tar.bz2下载路径为:
http://busybox.net/downloads/
2、 解压源码
$ tar xvf busybox-1.22.1.tar.bz2
3、 进入源码目录
$ cd busybox-1.22.1
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/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a
Ø 删除静态库和共享库文件中的符号表
$ rm lib/*.a
$ arm-none-linux-gnueabi-strip lib/*
Ø 删除不需要的库,确保所有库大小不超过8M
$ 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的支持
修改内核配置:
$ make menuconfig
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
重要:新制作的文件系统尺寸若超出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 serverip 192.168.9.120
#setenv ipaddr 192.168.9.233
#setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 – 42000000
#setenv bootargs root=/dev/nfs nfsroot=192.168.9.120:/source/rootfs rw console=ttySAC2,115200init=/linuxrc ip=192.168.9.233
# saveenv
重新启动开发板,查看是否能够正常挂载,功能是否正常
三、制作ramdisk文件系统
通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:
1、制作一个大小为8M的镜像文件
$ cd ~
$ dd if=/dev/zero of=ramdiskbs=1k count=8192 (ramdisk为8M)
2、格式化这个镜像文件为ext2
$ mkfs.ext2 -F ramdisk
3、在mount下面创建initrd目录作为挂载点
$ sudo mkdir /mnt/initrd
4、将这个磁盘镜像文件挂载到/mnt/initrd下
注意这里的ramdisk不能存放在rootfs目录中
$ sudo mount-t ext2 ramdisk/mnt/initrd
5、将我们的文件系统复制到ramdisk中
将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面
$ sudo cp/source/rootfs/* /mnt/initrd –a
6、卸载initrd
$ sudo umount/mnt/initrd
7、压缩ramdisk为ramdisk.gz并拷贝到/tftpboot下
$ gzip --best -cramdisk>ramdisk.gz
8、格式化为uboot识别的格式
$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
$ cp ramdisk.img /tftpboot
9、配置内核支持RAMDISK
制作完 ramdisk.img后,需要配置内核支持RAMDISK作为启动文件系统
make menuconfig
File systems --->
<*> Second extended fs support
Device Drivers
SCSI device support --->
<*> SCSI disk support
Block devices --->
<*>RAM block device support
(16)Default number of RAM disks
(8192) Default RAM disk size (kbytes) (修改为8M)
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
重新编译内核,复制到/tftpboot
10、在U-BOOT命令行重新设置启动参数:
#setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000
# saveenv
重新启动开发板查看能否正常启动
四、ext4文件系统制作
1、格式化工具制作
拷贝e2fsprogs-1.42.5.tar.xz到Linux下
解压
$ tar xvfe2fsprogs-1.42.5.tar.xz
进入工程
$ cde2fsprogs-1.42.5
创建脚本build.sh并添加如下内容:
$ vim build.sh
#!/bin/sh
CC=arm-none-linux-gnueabi-gcc
./configure --enable-elf-shlibs --host=arm-none-linux-gnueabi \
--prefix=/home/linux/tools
make
make install
执行脚本
./build.sh
在编译到最后可能会有个错误如下:
make[1]: [libext2fs.dvi] Error 1 (ignored)
这个不要紧其实我们需要的文件都编译好了
拷贝可执行文件和库到文件系统中
$ cp /home/linux/tools/sbin/mkfs.ext3 /source/rootfs/sbin
$ cp/home/linux/tools/lib/* /source/rootfs/lib
2、修改u-boot启动参数
setenv bootargsroot=/dev/nfs rwnfsroot=192.168.9.120:/source/rootfs init=/linuxrc console=ttySAC2,115200 ip=192.168.9.233
注意:192.168.9.120对应Ubuntu的ip
192.168.9.233 对应板子的ip
这两个ip应该根据自己的实际情况适当修改
3、分区
启动开发板在倒计时期间按任意键结束启动,执行如下命令
# fdisk -c 0
4、格式化
重新启动开发板进入系统后执行
# mkfs.ext3 -F /dev/mmcblk0p2
5、修改我们/source/rootfs/etc/fstab
在最后添加如下内容
/dev/mmcblk0p2 /mnt ext3 defaults 0 0
重新启动系统系统在启动最后会挂载mmcblk0p2 作为用户文件系统
rootfs文件系统的制作(二)相关推荐
- rootfs文件系统的制作(一)
根文件系统(root filesystem)是存放运行.维护系统所必须的各种工具软件.库文件.脚本.配置文件和其他特殊文件的地方,也可以安装各种软件包. 一般根文件系统主要目录结构: 创建根文件系统步 ...
- linux rootfs 编译,rootfs文件系统制作
rootfs文件系统制作笔记 环境:XC2440 linux2.32.2红帽5 根文件系统有一系列的目录组成,其中包括应用程序.C库.及相关的配置文件. 制作根文件系统的步骤如下,下面步骤均在虚拟机终 ...
- Linux根文件系统的制作
1. 根文件系统 文件系统是包括在一个磁盘(包括光盘.软盘.闪盘及其它存储设备)或分区的目录结构:一个可应用的磁盘设备可以包含一个或多个文件系统:如果您想进入一个文件系统,首先您要做的是挂载(moun ...
- (三)linux之根文件系统的制作
(一)准备工作 Ubuntu 16.04系统 linux-3.5内核:linux-3.5-20190929 交叉编译工具arm-linux-gcc-4.5.1-v6-vfp-20120301.rar ...
- 细说嵌入式Linux文件系统的制作方法
说到Linux文件系统对于刚刚接触Linux的初学者来说还是有些生疏,其实理解了他的定义并且掌握他的使用方法并不是什么难事.在下文中大家就会详细的了解到什么是Linux文件系统,并且可以学会嵌入式Li ...
- Linux——根文件系统的制作(jffs2 and ubifs)
一.根文件系统简介 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的第一个文件系统,系统引导启动程序 ...
- Porting:linux内核的模块化、根文件系统的制作和自动挂载
1.关于内核模块($: linux #: 开发板) 模块化设计. $:' vi drivers/char/Makefile obj-m += led_drv ...
- 第一季8:完整版(即包含mpp)根文件系统的制作
以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除. 一.概述 mpp是海思编写的与视频编解码有关的驱动.库等内容.我们需要部署这些内容,也就是把这些内容放在合适的目录位置. 二.mpp的目 ...
- 嵌入式文件系统镜像制作及烧写
将rootfs和userdata两个目录分别制作为镜像文件进行烧写: 镜像文件对应文件系统类型的选择,采用: rootfs制作为rootfs.img镜像,采用的文件系统类型为cramfs,只读,用于保 ...
最新文章
- 本地 无法启动 SQL Server 错误代码126
- mysql 列转置_MySQL 行列转置
- linux debian硬盘安装,硬盘安装linux debian如何配置grub文件
- 程序员小哥面对批评该怎么办?以我为例
- VC 6.0 + SP6 下载 及 安装详细说明
- 网站程序IIS布署问题备忘录
- 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》
- php设置上传文件大小限制_php修改上传文件大小限制实例详解
- 中蒙俄经济走廊背景_上海外国语大学师生代表团参观访问G60科创走廊俄罗斯院士创新基地...
- sql server累计求和函数_窗口函数 以及 储存过程 create procedure
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django
- 如何开启远程桌面的服务器,如何启用远程服务器 开启服务器的远程桌面控制...
- 如何快速把英语单词导入有道词典
- ST7200.11固件门DIY全程记录[2009-05-03修复成功!]
- Win10(winser2019)关闭驱动数字签名方法
- 计算机公式算乘法,excel表格乘法计算公式的用法
- 网站三级域名是什么样?
- VB6.0调用WebService
- Clion笔记- 菜单栏不见了...
- 组态王——创建协议组件失败