一、简介
Ubuntu作为通用化的桌面系统,平易近人。我比较喜欢在Windows系统上安装个ubuntu虚拟机,用来做一些嵌入式linux应用的开发。之前用到嵌入式开发套件时,其配带光盘里都会给出对应的linux系统,一般版本过时,功能简陋。这里自己构建安装系统,可以在不改变原有linux内核的情况下,搭建一个自己想要的开发环境,系统版本、桌面环境啥的,自由更换,方便定制。
一个完整的基于Linux的操作系统一般包括三个部分,bios引导、linux内核、根文件系统。这里简单谈一下它们。
1. arm一般以uboot作为引导固件,也有用UEFI的(aarch64),引导固件烧录在芯片片内或者片外的eeprom,或者是SD卡上,通过设置芯片boot引脚电平来选择启动项,上电后加载启动项中的引导固件,完成一些CPU硬件初始化、硬件检测、内存映射等工作,之后便从启动分区中读出linux内核,配置启动参数cmdline,加载进内存,启动内核。
2. Linux内核文件位于启动分区中,启动分区一般是fat或者ext格式,据配置的启动参数,linux内核运行时会选择加载dtb文件(device tree),等到linu硬件初始化完成后会选择加载ramdisk或者直接到指定的root分区中运行/sbin/init程序,完成Linux内核启动过程。
3. init是PID为1的进程,它是系统的第一个进程,在系统关闭前会一直运行。它通过运行一系列的脚本来引导操作系统的其余部分,这些脚本通常位于 /etc/rc.d/init.d 或 /etc/init.d 中,它们执行一些服务,比如设置系统的主机名、检查文件系统错误、装载其他文件系统、启用网络、启动打印服务,等等。这些脚本执行完后,init 启动一个名为 getty 的程序,在控制台上显示登录提示。图形登录屏幕通过一个图形显示管理器处理,比如 lightdm、GDM 。
这篇文档只讲一下根文件系统的构建,至于引导固件和linux内核,大家都有的吧,自己编译就可以了。引导分区的配置,在另外一篇文章中再写。
构建系统时需要你已经有一个能够运行的系统,可以通过命令行来敲些命令,同时你运行的系统所在的存储介质不能和你所要构建安装的系统存储介质一样,这个应该好理解,总不能自己装个系统把自己给覆盖了,那安装失败可就呵呵。这个就跟用U盘或者光盘把系统安装到硬盘上是一样的道理。
二、安装系统准备
1. debootstrap最小化系统
首先进入原有系统后,安装debootstrap包,然后通过debootstrap命令下载ubuntu系统的最小化系统包。
~$ sudo apt-get install debootstrap
~$ sudo debootstrap --arch=arm64 xenial /media/ubuntu/