一、根文件系统制作

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文件系统的制作(二)相关推荐

  1. rootfs文件系统的制作(一)

    根文件系统(root filesystem)是存放运行.维护系统所必须的各种工具软件.库文件.脚本.配置文件和其他特殊文件的地方,也可以安装各种软件包. 一般根文件系统主要目录结构: 创建根文件系统步 ...

  2. linux rootfs 编译,rootfs文件系统制作

    rootfs文件系统制作笔记 环境:XC2440 linux2.32.2红帽5 根文件系统有一系列的目录组成,其中包括应用程序.C库.及相关的配置文件. 制作根文件系统的步骤如下,下面步骤均在虚拟机终 ...

  3. Linux根文件系统的制作

    1. 根文件系统 文件系统是包括在一个磁盘(包括光盘.软盘.闪盘及其它存储设备)或分区的目录结构:一个可应用的磁盘设备可以包含一个或多个文件系统:如果您想进入一个文件系统,首先您要做的是挂载(moun ...

  4. (三)linux之根文件系统的制作

    (一)准备工作 Ubuntu 16.04系统 linux-3.5内核:linux-3.5-20190929 交叉编译工具arm-linux-gcc-4.5.1-v6-vfp-20120301.rar ...

  5. 细说嵌入式Linux文件系统的制作方法

    说到Linux文件系统对于刚刚接触Linux的初学者来说还是有些生疏,其实理解了他的定义并且掌握他的使用方法并不是什么难事.在下文中大家就会详细的了解到什么是Linux文件系统,并且可以学会嵌入式Li ...

  6. Linux——根文件系统的制作(jffs2 and ubifs)

    一.根文件系统简介 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的第一个文件系统,系统引导启动程序 ...

  7. Porting:linux内核的模块化、根文件系统的制作和自动挂载

    1.关于内核模块($: linux   #: 开发板)      模块化设计. $:' vi drivers/char/Makefile             obj-m    += led_drv ...

  8. 第一季8:完整版(即包含mpp)根文件系统的制作

    以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除. 一.概述 mpp是海思编写的与视频编解码有关的驱动.库等内容.我们需要部署这些内容,也就是把这些内容放在合适的目录位置. 二.mpp的目 ...

  9. 嵌入式文件系统镜像制作及烧写

    将rootfs和userdata两个目录分别制作为镜像文件进行烧写: 镜像文件对应文件系统类型的选择,采用: rootfs制作为rootfs.img镜像,采用的文件系统类型为cramfs,只读,用于保 ...

最新文章

  1. 本地 无法启动 SQL Server 错误代码126
  2. mysql 列转置_MySQL 行列转置
  3. linux debian硬盘安装,硬盘安装linux debian如何配置grub文件
  4. 程序员小哥面对批评该怎么办?以我为例
  5. VC 6.0 + SP6 下载 及 安装详细说明
  6. 网站程序IIS布署问题备忘录
  7. 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》
  8. php设置上传文件大小限制_php修改上传文件大小限制实例详解
  9. 中蒙俄经济走廊背景_上海外国语大学师生代表团参观访问G60科创走廊俄罗斯院士创新基地...
  10. sql server累计求和函数_窗口函数 以及 储存过程 create procedure
  11. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django
  12. 如何开启远程桌面的服务器,如何启用远程服务器 开启服务器的远程桌面控制...
  13. 如何快速把英语单词导入有道词典
  14. ST7200.11固件门DIY全程记录[2009-05-03修复成功!]
  15. Win10(winser2019)关闭驱动数字签名方法
  16. 计算机公式算乘法,excel表格乘法计算公式的用法
  17. 网站三级域名是什么样?
  18. VB6.0调用WebService
  19. Clion笔记- 菜单栏不见了...
  20. 组态王——创建协议组件失败

热门文章

  1. Google文件系统(GFS)翻译学习
  2. 《CUDA C编程权威指南》——2.4节设备管理
  3. C# int转string 每三位加一个逗号
  4. Log4j与common-logging联系与区别
  5. java访问权限的控制
  6. loadrunner脚本中关于httpCode401特殊情况
  7. Oracle大型数据库系统在AIX/UNIX上的实战详解
  8. OPENNLP——java的NLP工具
  9. java中String的七种用法
  10. 解决AndroidStudio更新后在 Building gradle project info 一直卡住