制作debian文件系统

参考网址链接http://blog.csdn.net/liuyu60305002/article/details/6745526 genext2fs
http://blog.csdn.net/luoqindong/article/details/42737879
创建基于arm的debian文件系统
https://github.com/ZubairLK/mkdebianrfs/blob/master/mkdebianrfs.sh
CI20 制作debian文件系统

首先取得debian的文件系统,这个文件系统的源代码移植没找到,网上大都是下载编译好的二进制文件直接用。debian文件系统分了多个版本,选用比较稳定的wheezy,我的开发板是mips架构的,所以执行步骤如下

  1. 安装 qemu 和 debootstrap 等工具
    sudo apt-get install binfmt-support qemu qemu-user-static debootstrap

debootstrap —- 一个 Debian 提供的工具,可以用来下载生成指定构架的文件系统
选择qeme中的qemu-mipsel-static —- 用于模拟 mips 环境

  1. 用 debootstrap 从 debian 源中下载
    创建文件夹 fs_debian_wheezy
    执行命令
    $sudo debootstrap –arch=mipsel –foreign wheezy fs_debian_wheezy http://ftp.uk.debian.org/debian/

    最后的网址不唯一,可以不写,默认国内代理,不过发现下载的文件系统不全,建议要写上制定网址。

  2. 抽取完毕进行第二阶段
    因为在宿主是 x86 架构,不能安装 mips 架构的软件。需要依靠 qemu-mipsel-static 来
    模拟成 mips环境进行安装。
    a.复制 qemu-mipsel-static 到刚构建的基本系统中

    $ sudo cp /usr/bin/qemu-mipsel-static fs_debian_wheezy/usr/bin

b.用 qemu-mipsel-static 来模拟 mips

$ sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot fs_debian_wheezy debootstrap/debootstrap --second-stage

该命令意思是设置一些环境变量,然后切换根目录到fs_debian_wheezy,执行目录fs_debian_wheezy/debootstrap下的命令: debootstrap –second-stage.
(这点在执行chroot命令的同时回去调用qemu-mipsel-static命令,如果报段错误,可能是下载的qemu有问题,换台电脑下载,跟ubantu的软件源有关)

终端上会最后打印 I: Base system installed successfully.,说明根文件系统就定制成功了。
4、收尾工作
a.切换到 qemu
$sudo chroot fs_debian_wheezy

b.设置软件源头

 vi /etc/apt/source.list

deb http://cdn.debian.net/debian wheezy main contrib non-free
deb-src http://cdn.debian.net/debian wheezy main contrib non-free

apt-get update 更新软件

c.为 root 设置密码和创建新用户
#passwd root

debian不能以root用户登陆,所以创建一个普通用户,登陆系统后再切换到root用户
#adduser qq
#passwd qq 设置用户i的密码
d.修改 inittab, 打开串口终端
#cp /usr/share/usr/share/sysvinit/inittab /etc/
#vi /etc/inittab
找到 #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100,大约在 63 行左右
修改为 T0:23:respawn:/sbin/getty -L ttyPS0 115200 vt100,此处依据自己的实际情况修改
e.退出 qemu 环境
#exit
5、由于我采用的是用烧录工具烧写到nand里的,也可以用SD卡。
所以需要把文件系统压缩成ext2格式。
采用genext2fs 这个命令。
$sudo genext2fs -b 102400 -d rootfs ext2
如果报 could not allocate block (no free space)
这个错误的原因是给的大小了,k单位,上述100M
用du -h rootfs 查看文件大小。
我用的是脚本去制作,必须先安装genext2fs ,脚本mkext2.sh源代码如下


echo $#
#if [ $# != 1 ]; then
#       echo "usage: $0 [rootfs_dir] "
#       exit
#fi

GENEXT2FS=./genext2fs
OUTPUT=system.img
ROOTFS_DIR=$1
echo $ROOTFS_DIR
rm $OUTPUT

cp $ROOTFS_DIR ./rootfs_system -rf
SYSDIR=./rootfs_system

find $SYSDIR -name .gitkeep | xargs rm

echo $TMPDIR $OUTPUT
rm -fr *.img

num_blocks=`du -sk $SYSDIR | tail -n1 | awk '{print $1;}'`


# add 10%
extra_blocks=`expr $num_blocks / 10`
num_blocks=`expr $num_blocks + $extra_blocks`

#if [ $num_blocks -lt $2 ]; then
#   num_blocks=$2
#fi
num_inodes=`find $SYSDIR | wc -l`
# add 10%
extra_inodes=`expr $num_inodes / 20`
num_inodes=`expr $num_inodes + $extra_inodes`

echo $GENEXT2FS" -d "$SYSDIR" -b "$num_blocks" -N "$num_inodes" "$OUTPUT
$GENEXT2FS  -d $SYSDIR -b $num_blocks -N $num_inodes $OUTPUT -a
e2fsck -fy $OUTPUT
tune2fs -j $OUTPUT
tune2fs -O extents,uninit_bg,dir_index $OUTPUT
fsck.ext4 -fy $OUTPUT

rm $SYSDIR -rf

执行./mkext2 rootfs/
会在当前路径生成system.img

自己的一些浅理解:中间一直在思考debian的文件系统和用buildroot做的文件系统有啥区别(buildroot是采用busybox)。经过对比两个文件系统发现目录结构有一点变化,init启动方式不同,bin/下的命令不同,其中debian的特色就是有apt-get这个命令,debian支持的软件包3万多个,而ubutun才7千多。两者都是linux文件系统,都遵循基本的文件结构,只是etc/ lib/ 下的文件不同。在busybox中可以找到根文件系统的源代码(buildroot/output/build/busybox-1.22.1/)。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值