linux系统移植和根文件系统制作,Linux系统移植实验---根文件系统制作

实验十一文件系统的移植

【实验目的】

熟悉Linux文件系统目录结构,创建自己的文件系统,通过NFS方式测试;用文件系统工具生成ramdisk文件系统映象文件。

【实验环境】

1、ubuntu 12.04发行版

2、FS4412平台

3、交叉编译器arm-none-linux-gnueabi-gcc

【实验步骤】

一、根文件系统制作

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-pointtypeoptions         dump     fsck order

proc      /procprocdefaults00

tmpfs/tmptmpfsdefaults00

sysfs/syssysfsdefaults00

tmpfs/devtmpfsdefaults00

这里我们挂载的文件系统有三个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=/linuxrcip=192.168.9.233

# saveenv

重新启动开发板,查看是否能够正常挂载,功能是否正常

5910028.htm

三、制作ramdisk文件系统

通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:

1、制作一个大小为8M的镜像文件

$ cd  ~

$ ddif=/dev/zeroof=ramdiskbs=1kcount=8192 (ramdisk为8M)

2、格式化这个镜像文件为ext2

$ mkfs.ext2-Framdisk

3、在mount下面创建initrd目录作为挂载点

$sudomkdir/mnt/initrd

4、将这个磁盘镜像文件挂载到/mnt/initrd下

注意这里的ramdisk不能存放在rootfs目录中

$sudomount-text2ramdisk/mnt/initrd

5、将我们的文件系统复制到ramdisk中

将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面

$sudocp/source/rootfs/*/mnt/initrd–a

6、卸载initrd

$sudoumount/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  --->

RAMblock  devicesupport

(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  xvf  e2fsprogs-1.42.5.tar.xz

进入工程

$ cd e2fsprogs-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启动参数

setenvbootargsroot=/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 作为用户文件系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值