制作debian文件系统

来源:互联网 发布:自学电脑编程最快多久 编辑:程序博客网 时间:2024/05/29 04:43

参考网址链接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#fiGENEXT2FS=./genext2fsOUTPUT=system.imgROOTFS_DIR=$1echo $ROOTFS_DIRrm $OUTPUTcp $ROOTFS_DIR ./rootfs_system -rfSYSDIR=./rootfs_systemfind $SYSDIR -name .gitkeep | xargs rmecho $TMPDIR $OUTPUTrm -fr *.imgnum_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#finum_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 -ae2fsck -fy $OUTPUTtune2fs -j $OUTPUTtune2fs -O extents,uninit_bg,dir_index $OUTPUTfsck.ext4 -fy $OUTPUTrm $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/)。

0 0