(五)Debian系统--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>

目录 

一、Debian系统介绍

二、Linux发行版和Linux内核的关系

三、Debian文件系统制作

1、环境配置

2、Debian文件系统构建

🍟 第一阶段

🍟 第二阶段

三、Debian文件系统配置

1、更新源

2、安装网络相关库

3、配置账号

四、通过wpa_supplicant连接wifi

五、增加swap分区

六、参考内容 


一、Debian系统介绍

Debian GNU/Linux 是 Linux 操作系统的一个特定发行版,以及在其上运行的众多软件包。Debian项目由 Ian Murdock 于 1993 年发起,是在Linux发行版的概念还很新的时候获得广泛认可的首批自由软件项目之一。Debian 这个名字——发音为 deb-EE-uhn——是一个合成词,它混合了创建者的名字 Ian 和他妻子 Debra 的名字。


二、Linux发行版和Linux内核的关系

内核:位于应用软件和底层硬件系统之间。它直接与硬件通信,传递应用软件的任何请求。一个简单的例子来说明这一点,就是在手机上录制视频。当你点击相机应用程序时,该软件将向内核传达它想要使用相机和麦克风的信息。然后,内核将通知摄像头和麦克风硬件唤醒并做好准备。那么现在,软件和硬件将协同工作,为你录制好视频。

操作系统:主要目的是管理系统进程和资源。它包含内核,因此执行内核可以执行的所有任务。此外,它还确保系统保护和安全。操作系统充当用户和底层硬件系统之间的接口。所有应用程序都在操作系统创建的封闭环境中运行。因此,没有操作系统就无法使用系统。

Linux 本身就是一个内核。然后,开发人员在其基础上进行构建,以提供当今可用的各种 Linux 发行版。


三、Debian文件系统制作

由于F1C200s的RAM只有64M,无法支持像是Ubuntu-Core这样的文件系统(最低RAM需求512M),所以一般只能用buildroot来生成简单的文件系统,或者裸机开发。

但是为了方便地使用Debian系的丰富软件,我们可以自己构建Debian最小系统,最小rootfs在180MB左右。

-- 稚辉君

1、环境配置

首先下载两个工具:qemu-arm-static和debootstrap。

🥝 qemu-arm-static:通过qemu-arm-static,我们在x86的Ubuntu PC机上,可以模拟ARM处理器,就像运行在ARM上一样进行各种操作。这样既实现了ARM环境,又利用了x86 PC的处理能力。

🥝 debootstrap:是Debian/Ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多,当然功能也没那么强大,因此,只能说是“基本的系统”。

sudo apt install qemu-user-static -y
sudo apt install debootstrap -y
mkdir Debian_rootfs

2、Debian文件系统构建

由于我们的Ubuntu是Linux系统,而开发板是ARM系统,在使用bootstrap为外部体系结构引导发行版时,才需要分开两个阶段。请参见手册页--foreign上的选项说明。

例如,使用x64机器为嵌入式ARM系统创建Debian安装系统。第一阶段将下载所需的.deb文件并将其解压缩到您指定的目录中。第二阶段解压运行所有程序包配置脚本,这些脚本必须使用目标体系结构或使用qemu-user-static模拟目标体系结构来完成,在此处我们使用qemu-user-static模拟ARM系统来完成在完成两个阶段的配置后,还需要进入qemu模拟器进行一些必要配置。

🍟 第一阶段

使用华为镜像源抽取根文件系统(下载deb软件包)命令如下,bootstrap命令详解见Bootstrap命令详解。其中foreign表示若目标架构与本机架构不符时,需要携带该参数;arch代表架构,armhf (支持硬件浮点)、armel (软浮点);verbose表示不打印wget等包下载数据,进行静默安装;buster代表Debian发行版本代号。

sudo debootstrap --foreign --verbose --arch=armel  buster rootfs http://mirrors.huaweicloud.com/debian/

其中,不同Debian发行版代号如下。命令执行完成后就是大家最常见的linux根文件系统,但是目前还不能直接使用,还需要对其做一些其他的配置。 

版本号代号备注
Debian 11bullseye稳定版
Debian 10buster旧稳定版
Debian 9stretch旧稳定版
Debian 8jessie已存档版
Debian 7wheezy被淘汰版
Debian 6squeeze被淘汰版
Debian 5lenny被淘汰版

至此,已经下载了最小的Debian系统, 你也可以将它想象为"最小系统"类似的存在,没有其他 "外设" 。下图是我补充的图片,所在文件夹名字和上面不同。

🍟 第二阶段

上面讲在第二阶段我们应该使用qemu-user-static模拟ARM系统运行所有程序包配置脚本,怎么模拟ARM系统呢?使用qemu这个虚拟机。简而言之,我们需要在qemu模拟出的ARM系统中执行一个Debian系统配置,相当于把Debian放到ARM开发板上配置。具体操作为:文件夹挂载 + chroot切换根目录。

1)文件挂载:

首先对文件夹按照下面的命令进行挂载,这里为什么需要挂载呢? 

cd rootfs
sudo mount --bind /dev dev/
sudo mount --bind /sys sys/
sudo mount --bind /proc proc/
sudo mount --bind /dev/pts dev/pts/

我的理解是:因为在宿主(Ubuntu虚拟机)是x64架构,不能安装arm架构的软件,需要依靠qemu-arm-static模拟成arm环境进行安装,而模拟arm环境相当于,以指定的某个目录为新的根目录,如果不更改挂载点,直接下载一些软件或者依赖项就会下载到原来的挂载点而出错。

通俗一点的理解:虽然更新了根目录,如果没有挂载新文件系统的/dev等文件夹,如果再去操作/dev,相当于还是在操作Ubuntu的/dev,只有挂载了这个文件夹之后,再操作才相当于真正操作Debian新的根文件系统的/dev。评论区讨论吧!欢迎指正!

2)chroot切换根目录:

chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 /,即以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 / 位置。

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

使用上面的命令将我们之前安装的qemu复制到/rootfs/usr/bin目录下,可以看到我们具有该文件的读、写、可执行权限。

然后在Debian_rootfs目录下执行下面的命令,该命令意思是设置一些环境变量,并使用chroot命令将rootfs切换为新的根目录,执行目录rootfs/debootstrap下的命令: debootstrap –second-stage,后面的是debootstrap可执行文件的两个参数。

sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs /debootstrap/debootstrap --second-stage --verbose

该命令的主要作用是:对拉取的Debian根文件系统进行配置。这主要是由上面的--foreign选项决定的。这里是使用qemu-user-static模拟目标体系结构来完成的,因为我们使用的chroot更改了根目录,并挂载了新的文件系统的文件夹,相当于使用chroot命令+挂载,完成arm架构的模拟。


三、Debian文件系统配置

sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs

使用上面的命令进入qemu虚拟器,相当于进入ARM系统下的Debian文件系统中,如下图所示。chroot rootfs 后面不加命令相当于执行chroot rootfs  /bin/bash,也就是打开一个shell,详见chroot语法。

1、更新源

更新源为国内源可以提高后续软件下载速度,具体命令如下。因为默认的源是 http 的,但是如果准备使用的镜像源是https 的,所以需要额外的安装有关 HTTPS 的包。所以安装这两个包之后就可以正常拉取https的源了:apt-transport-https和ca-certificates。

vi /etc/apt/sources.list
#写入: deb http://mirrors.huaweicloud.com/debian buster main
apt-get update

2、安装网络相关库

apt-get install wpasupplicant #安装WIFI配置相关的组件
apt-get install net-tools     #安装网络基础组件、如使用ifconfig等
apt-get install udhcpc        #当wifi连接成功后,需要用这个组件去获取IP地址

apt-get install evtest        #触摸屏测试
apt-get install mplayer
apt-get install alsa-utils    #音频测试

## 其他组件
apt-get install wireless-tools 
apt install sudo vim openssh-server htop
apt install pciutils usbutils acpi #acpi我没有安装成功,换了其他的源也不可以

3、配置账号

设置root账号密码。

passwd root

4、配置时区

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

5、配置SSH

vi /etc/ssh/sshd_config
#写入: PermitRootLogin yes

6、rootfs打包

apt clean #清理
exit #退出chroot
rm rootfs/usr/bin/qemu-arm-static #删除之前拷贝的文件
cd rootfs
sudo umount   dev/pts/ # 一定要在/dev前面umount
sudo umount   dev/
sudo umount   sys/
sudo umount   proc/
sudo tar cvf ../rootfs.tar ./ #在rootfs目录下执行

最终生成了Debian文件系统压缩包,解压即可使用。

7、Debian文件系统启动

rootfs.tar文件目录终端中,输入以下命令解压到TF卡的rootfs分区,也就是第二分区。

sudo tar -vxf ./rootfs.tar -C /media/project01/rootfs/

注意:一定要等待拷贝完成,再拔出TF卡,我的转接器上有指示灯,等待指示灯常亮,不再闪烁即可拔出。将TF卡插到开发板上,上电启动复位,等待,启动成功!!!


四、增加swap分区

芯片的SiP内存只有64MB,大部分情况下都不够用,所以需要开启swap使用内存卡的一部分空间来作为交换内存。

在使用一些软件的过程中,会遇到系统崩溃,尤其是使用 apt-get install 的时候,所以需要加入swap分区,可以简单理解为虚拟内存。

这十分类似于Windos的虚拟内存,虚拟内存其实就是将硬盘的一部分容量当内存使用从而弥补物理内存不足的问题。

我们可以通过free -m来查看下内存使用状况,此处我直接在qemu虚拟器中查看:

 使用如下命令创建你想要添加swap分区的大小:

dd if=/dev/zero of=/swap1 bs=1M count=512  #count是SWAP大小,512就是512MB

设置swap分区文件,然后激活分区:

# 设置分区文件
mkswap /swap1
# 激活swap分区
swapon /swap1
vi /etc/fstab
# 最后一行添加 
# /swap1 swap swap defaults 0 0

 将新的根文件系统拷贝到TF卡的第二分区,重新上电启动,查看交换分区大小,的确为我们设置的512M。


五、参考内容 

1. 创建基于arm的debian文件系统

2. debootstrap定制arm平台linux

3. Debootstrap - linux-sunxi.org

4. 系统移植2-Debian系统的移植 - Shuzang's Blog

5. Debian文件系统制作,以及WIFI配置、交换分区配置


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值