Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些。

emdebian 是一个非常好用的嵌入式linux操作系统,其基于debian的特点对于熟悉debian系统的人来说很容易就能得心应手地进行配置。

emdebian有好几个版本:Grip,Crush,Baked. 关于它们的详细介绍可以查看:http://www.emdebian.org/emdebian/flavours.html

通常为了便于使用,我们选择Grip版本。

debian下有三个工具可以用来创建根文件系统,它们分别是Debootstrap、CDebootstrap和Multistrap,安装这几个软件:

apt-get install debootstrap multistrap

本文中内容主要参考debian网站的CrossDebootstrap

先用Debootstrap制作基于debian根文件系统(详见官方文档):

debootstrap --foreign --arch armel wheezy rootfs http://ftp.debian.org/debian/

会在当前的rootfs下建立一个基本的根文件系统(名字为rootfs),然后将rootfs文件家移到nfs对应文件夹下,并重启nfs:

/etc/init.d/nfs-kernel-server restart

启动mini2440,按任意键进入uboot,按'q'键进入uboot命令行,将bootargs修改成以下内容:

noinitrd root=/dev/nfs rw nfsroot=192.168.211.2:/home/host/nfs/mini2440/rootfs ip=192.168.211.211 console=ttySAC0 init=/bin/bash

重启mini2440,但是无法进入跟文件系统,提示下面的错误:

Warning: unable to open an initial console.

参考http://blog.chinaunix.net/uid-10008293-id-2972298.html ,在根文件系统下创建设备文件console和null:

cd rootfs/dev
mknod -m console c
mknod -m null c

然后重启mini2440,就可以进入根文件系统了。

然后在新的根文件系统下进行配置:

 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true  LC_ALL=C LANGUAGE=C LANG=C /debootstrap/debootstrap --second-stage

但是安装base-file是提示出错,查看/debootstrap/debootstrap.log才知道执行rmdir /var/run出错。

用ls命令可以知道该文件夹下存在一个临时文件,将该临时文件删除。然后再次执行上面的命令,但是在安装 mount时提示下面的错误:

dpkg: error processing /var/cache/apt/archives/mount_2.20.1-.3_armel.deb (--unpack):

然后就开始尝试重新开始安装这些deb包,默认情况下会重试5次才会停止执行。尝试了半天,但是安装过程中的错误很难追踪和修正,

我最终放弃了使用debootstrap制作基于debian的根文件系统.

下面用debootstrap来安装基于emdebian的根文件系统(参考文章http://www.linuxidc.com/Linux/2011-11/47804.htm):

步骤跟上面过程类似,先下载deb包:

debootstrap --foreign --arch armel --keyring=/usr/share/keyrings/emdebian-archive-keyring.gpg squeeze rootfs http://www.emdebian.org/grip

安装qemu-user-static包,并将qemu-arm-static拷贝到rootfs下(该工具用于避免chroot出错):

apt-get install qemu-user-static
cp /usr/bin/qemu-arm-static  rootfs/usr/bin

然后安装deb包:

chroot rootfs /bin/bash
/debootstrap/debootstrap --second-stage

安装过程中提示安装dash出错,执行”dpkg -i /var/cache/apt/archives/dash_0.5.5.1-7.4em1_armel.deb”可以得到下面的输出信息:

(Reading database ...  files and directories currently installed.)
Unpacking dash (from .../dash_0.5.5.-.4em1_armel.deb) ...
/bin/ln: creating symbolic link `/usr/share/man/man1/sh..gz.tmp': No such file or directory
dpkg: error processing /var/cache/apt/archives/dash_0.5.5.-.4em1_armel.deb (--install):
subprocess new pre-installation script returned error exit status
Errors were encountered while processing:
/var/cache/apt/archives/dash_0.5.5.-.4em1_armel.deb

由于/usr/share/man文件夹不存在,所以无法创建软链接,创建文件夹:

mkdir -p /usr/share/man/man1/

然后再次执行:

/debootstrap/debootstrap --second-stage  

再执行下面的命令进行配置:

echo "deb http://www.emdebian.org/grip/ squeeze main" >> rootfs/etc/apt/sources.list
printf "auto eth0\niface eth0 inet dhcp\n" >> /etc/network/interfaces

然后再将该采用nfs启用根文件系统方式启动mini2440,但是进入bash前有个错误提示:

bash: cannot set terminal process group (-): Inappropriate ioctl for device
bash: no job control in this shell

这个问题暂时作为遗留问题,有空再来研究。

该文件系统大小在7、80M左右。

我下面选择用CDebootsrap(用c语言开发的debootstrap类似工具,比debootstrap快很多)来制作基于debian的根文件系统,执行下面命令:

cdebootstrap --foreign --arch armel wheezy rootfs http://ftp.debian.org/debian/

然后仍然用nfs启动根文件系统(选择和上面一样的bootargs),就能进入刚才制作的根文件系统。

然后用下面命令来完成deb包的解压缩和安装:

/sbin/cdebootstrap-foreign

然后执行下面的命令对所有未配置的deb包进行配置:

PATH=/usr/bin:/bin:/usr/sbin:/sbin dpkg --configure -a

现在基础的一些配置就弄好了,当前rootfs大小在200多M左右。

整个过程非常流畅,没有出现关键性错误导致安装失败的情况发生。

然后在对系统进行配置:

mount -t proc proc /proc
route add default gw 192.168.211.1

然后再根据自己需要对/etc/apt/sources.list进行配置(可参考https://lug.ustc.edu.cn/repogen/

接着使用CDebootstrap来制作基于emdebian的跟文件系统,执行下面的命令:

cdebootstrap --foreign --arch armel --keyring=/usr/share/keyrings/emdebian-archive-keyring.gpg squeeze rootfs http://www.emdebian.org/grip

但是显示了下面的错误信息:

P: Retrieving InRelease
P: Validating InRelease
I: Good signature from "Emdebian Archive Signing Key"
P: Parsing InRelease
W: parser_rfc822: Iek! Don't find end of field, it seems to be after the end of the line!
E: Couldn't parse InRelease!

所以后续过程也无法继续下去了。

最后使用multistrap制作根文件系统。

先用multistrap制作基于debian的根文件系统:

创建配置文件,名称为multistrap_debian.conf,内容如下:

[General]
noauth=true
unpack=true
debootstrap=Squeeze
aptsources=Squeeze
arch=armel [Squeeze]
packages=wpasupplicant wireless-tools firmware-ralink busybox netbase net-tools makedev
source=http://ftp.au.debian.org/debian/
keyring=debian-archive-keyring
components=main non-free
suite=squeeze

然后执行下面的命令下载deb包并解压缩:

multistrap -a armel -d rootfs -f multistrap_debian.conf

执行完毕后将qemu-arm-static拷贝到rootfs/usr/bin下

cp /usr/bin/qemu-arm-static  rootfs/usr/bin

然后chroot进入rootfs,进行配置:

chroot rootfs
touch /etc/fstab
mount -t proc proc /proc
dpkg --configure -a

然后在mini2440下设置nfs启动根文件系统,配置与前面配置相同,但会有错误提示(不影响一般使用):

bash: cannot set terminal process group (-): Inappropriate ioctl for device
bash: no job control in this shell

暂时作为遗留问题,留待解决。

整个文件系统大小在160M左右。

最后用multistrap制作基于emdebian的根文件系统。

先创建配置文件,名称为multistrap_emdebian.conf,内容如下:

[General]
noauth=true
unpack=true
debootstrap=Grip
aptsources=Grip [Grip]
# space separated package list
packages=busybox netbase net-tools ifupdown makedev
source=http://www.emdebian.org/grip
suite=squeeze

该文件中需要注意的是suite,suite类型有四种:etch,lenny,squeeze,sid分别对应oldstabe,stable,tesing,sid。

看名字基本能明白含义,只有sid不容易看明白,实际上sid表示滚动更新版本

执行下面命令制作根文件系统:

multistrap -a armel -d rootfs -f multistrap_emdebian.conf

很快就可以下载成功,并自动将deb包解压缩根文件系统下。

将/usr/bin/qemu-arm-static拷贝到rootfs/usr/bin下,然后执行如下命令进行安装后的配置:

chroot rootfs
dpkg --configure -a

在配置过程中需要选择时区,分别选择6(Asia)和65(Shanghai).

重启mini2440,采用nfs启动根文件系统(和本文前面的配置一样),但仍然会有一个错误(不影响一般使用):

bash: cannot set terminal process group (-): Inappropriate ioctl for device
bash: no job control in this shell

这个问题仍然留待后续再解决。

生成根文件系统大小在50M左右

从前面陈述的根文件系统制作过程可以看到,mutlstrap比较利于扩展,使用也比较方便,所以我倾向于以后采用multistrap来制作根文件系统

debian下为arm开发板创建基于debian或emdebian的根文件系统的更多相关文章

  1. [boostrap]debian下为arm创建debian和emdebian文件系统

    转自:http://www.cnblogs.com/qiaoqiao2003/p/3738552.html Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. e ...

  2. 使用arm开发板搭建无线mesh网络(二)

    上篇博文介绍了无线mesh网络和adhoc网络的区别,这篇文章将介绍无线mesh网络的骨干网节点的组建过程.首先需要介绍下骨干网节点的设计方案:每个骨干网节点都是由一块友善之臂的tiny6410 ar ...

  3. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  4. ARM开发板挂载虚拟机 nfs目录

    ARM开发板做相关开发,为了调试方便,常把开发板mnt目录挂载到虚拟机nfs共享目录上,这样调试程序时候就不用把程序转到开发板上再运行,方便很多.要挂载nfs共享目录,需要安装必要的组件支持. 1.虚 ...

  5. ubuntu 交叉编译qt 5.7 程序到 arm 开发板

    ubuntu 交叉编译qt 5.7 程序到 arm 开发板平台1 ubuntu 12.042 arm-linux-gcc 4.5.13 QT 5.74 开发板210 armcortex-A8 一 概述 ...

  6. ARM开发板挂载Ubuntu18.04主机的NFS共享文件夹

    环境 ubuntu主机环境:Window10 下装VMWare下装的 ubuntu18.04LTS x64 IP 192.168.10.119 Window10下配置192.168.10该网段 开发板 ...

  7. 关于ARM开发板与PC主机的网络设置问题

    直观来讲,ARM开发板多数情况下会有条网线与主机相连,所以最重要的一步是保证PC主机与ARM开发板能互通. 互通的意思进一步来讲就是互相能ping通.也就是说在瘟都死的dos下(假设主机是瘟都死系统) ...

  8. Windows10、ARM开发板、VMware虚拟机同时连接Internet

    前段时间有人遇到一些网络连接问题,让我帮忙处理,他想让ARM开发板连接外网,可以连接网络数据库,同时保证自己的电脑可以上网. 本来说直接可以连接一个路由器,分配一个内网IP给ARM就可以了,但是当时那 ...

  9. ARM开发板挂载U盘

    ARM开发板运行Linux系统后,插入U盘,通过串口打印系统识别到U盘如下: 系统识别U盘盘符为sda4 那么需要挂载后才能操作U盘:挂载命令 mount -t vfat /dev/sda4 /mnt ...

随机推荐

  1. 使用rsync进行多服务器同步

    使用rsync进行多服务器同步 @(Others) 当集群数量很大时,修改配置文件和节点之间的文件同步是一件很麻烦且浪费时间的事情. rsync是linux上实现不同机器之间文件同步.备份的工具,ce ...

  2. weblogic8.1 登陆5 ip 限制

    weblogic8.1  5 ip 限制 报错信息如图所示: 解决办法:此weblogic 未破解,去网上下载破解包,然后放到 copy weblogic_sp.jar to $WL_HOME/ser ...

  3. [Functional Programming Monad] Combine Stateful Computations Using A State Monad

    The true power of the State ADT really shows when we start combining our discrete, stateful transact ...

  4. 从服务端架构设计角度,深入理解大型APP架构升级

    随着智能设备普及和移动互联网发展,移动端应用逐渐成为用户新入口,重要性越来越突出.但企业一般是先有PC端应用,再推APP,APP 1.0版的功能大多从现有PC应用平移过来,没有针对移动自身特点考虑AP ...

  5. android wifi调试(无线调试) 一步到位

    没有数据线时候,怎么进行调试开发?只要在一个局域网内,最好选择wifi调试! 网上有很多这样的教程,但是有很多步.很繁琐.最近我在gp上下载了一个软件可以实现点击一步就可以了.不需要在手机上输入任何命 ...

  6. Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤

    Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤 1.git add new.txt 2.git commit -m "add a new file" 3.git pu ...

  7. 基于paramiko进行远程执行Linux命令

    直接贴一段代码import paramiko class remote_start(object): def __init__(self,host,username,pwd): self.ssh = ...

  8. vfork & fork

    转载 http://coolshell.cn/articles/12103.html 在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不 ...

  9. 【DB2】查询上月末、上年末、上年同期等信息

    此处以20180612为例子 想得到上年末.上年同期.上月末这些时间点,只需要记住函数ADD_MONTHS.LAST_DAY.ADD_YEARS这些函数即可. 上年末 SELECT SUBSTR(TO ...

  10. JavaScript | JQuery插件定义方法

    参考 http://www.2cto.com/kf/201507/417874.html ——————————————————————————————————————————————————————— ...