IMX6ULL - Linux根文件系统(rootfs)构建

发布者:RadiantBreeze最新更新时间:2025-02-28 来源: cnblogs关键字:Linux  根文件系统  rootfs 手机看文章 扫描二维码
随时随地手机看文章

一、Ubuntu-base20.04.3

Ubuntu官方已经制作好了各架构、各版本的base版根文件系统,只需下载下来做少许改动即可。


下载Ubuntu Base 20.04.3 LTS (Focal Fossa)


ubuntu-base-20.04.3-base-armhf.tar.gz 2021-08-19 10:56 22M

解压


mkdir rootfs

sudo chmod 777 rootfs

tar -zxvf ubuntu-base-20.04.3-base-armhf.tar.gz -C rootfs

#避免后面更新软件报错

sudo chmod 777 ./rootfs/tmp/

安装工具


sudo apt-get install qemu-user-static

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

拷贝主机DNS


sudo cp /etc/resolv.conf ./rootfs/etc/resolv.conf

更换下载源


cp ./rootfs/etc/apt/source.list ./rootfs/etc/apt/source.list.bak

vim ./rootfs/etc/apt/source.list

`Esc` + `:`

%s/ports.ubuntu.com/mirror.tuna.tsinghua.edu.cn/g

`Enter`

创建挂载脚本vim mount.sh


内容如下:


#!/bin/bash

mnt() {

echo 'MOUNTING'

sudo mount -t proc /proc ${2}proc

sudo mount -t sysfs /sys ${2}sys

sudo mount -o bind /dev ${2}dev

sudo mount -o bind /dev/pts ${2}dev/pts

sudo chroot ${2}

}

umnt() {

echo 'UNMOUNTING'

sudo umount ${2}proc

sudo umount ${2}sys

sudo umount ${2}dev/pts

sudo umount ${2}dev

}


if [ '$1' == '-m' ] && [ -n '$2' ] ;

then

mnt $1 $2

elif [ '$1' == '-u' ] && [ -n '$2' ];

then

umnt $1 $2

else

echo ''

echo 'Either 1'st, 2'nd or both parameters were missing'

echo ''

echo '1'st parameter can be one of these: -m(mount) OR -u(umount)'

echo '2'nd parameter is the full path of rootfs directory(with trailing '/')'

echo ''

echo 'For example: ch-mount -m /media/sdcard/'

echo ''

echo 1st parameter : ${1}

echo 2nd parameter : ${2}

fi


更改权限:


sudo chmod +x mount.sh 

挂载


source mount.sh -m ./rootfs/

更新软件


apt update

apt install sudo vim kmod net-tools ethtool ifupdown rsyslog htop iputils-ping language-pack-en-base ssh

注意:ssh必须安装,不然后面链接串口服务会出错


设置用户名和密码


root@zsd-virtual-machine:/# passwd root

New password: 

Retype new password: 

passwd: password updated successfully


root@zsd-virtual-machine:/# adduser zsd 

New password: 

Retype new password: 

`Enter`

`Enter`

......

`Enter`

`Enter`

设置IP和名称


root@zsd-virtual-machine:/# echo 'zzssdd2-imx6ull' > /etc/hostname

root@zsd-virtual-machine:/# echo '127.0.0.1 localhost' >> /etc/hosts

root@zsd-virtual-machine:/# echo '127.0.0.1 zzssdd2-imx6ull' >> /etc/hosts

设置串口终端


ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttymxc0.service

注意:


如果提示报错提示如下:


root@zsd-virtual-machine:/# ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttymxc0.service

/usr/bin/ln: failed to create symbolic link '/etc/systemd/system/getty.target.wants/getty@ttymxc0.service': No such file or directory

说明/etc/systemd/system/目录下没有getty.target.wants目录。


解决方法:安装ssh会创建该目录,然后重新执行一遍设置串口终端命令即可。


退出


#退出qemu模拟器

exit

#取消挂载

source mount.sh -u ./rootfs/

#打包

sudo tar -czvf ubuntu-base-20.04.3-rootfs.tar.gz rootfs/*

二、Debian 11

直接使用三方制作好的Debian根文件系统,比如Linaro

使用Multistrap或Debootstrap工具构建自己的Debian根文件系统

下面我使用debootstrap工具构建Debian11根文件系统(别问为什么不用multistrap,问就是不会︶︹︺)


安装工具


sudo apt install binfmt-support qemu qemu-user-static debootstrap

抽取Debain文件系统


sudo debootstrap --arch=armhf --foreign bullseye rootfs https://mirrors.tuna.tsinghua.edu.cn/debian/

参数说明:


arch:CPU架构


bullseye:debian版本名,这是版本11的名称


foreign:在与主机架构不相同时需要指定此参数,仅做初始化的解包


rootfs:要存放文件系统的文件夹


https://mirrors.tuna.tsinghua.edu.cn/debian/:下载源,这里使用国内的清华源


抽取成功后如下:


$ ls ./rootfs/

bin   debootstrap  etc   lib   root  sbin  tmp  var

boot  dev          home  proc  run   sys   usr

复制qemu-arm-static到刚构建的基本系统中


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

完成文件系统引导


sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true chroot rootfs debootstrap/debootstrap --second-stage

参数说明:


chroot rootfs


更改根目录为rootfs:就是变更当前进程及其子进程的可见根路径。变更后,程序无法访问可见根目录外文件和命令。


DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true


避免debconf向用户询问任何问题(非交互式),相当于是静默配置安装。


了解更多debconf - Debian Wiki


debootstrap


man debootstrap

debootstrap --help

了解更多Debootstrap - Debian Wiki


完成后提示如下:


I: Base system installed successfully.

更换下载源


#备份

sudo cp ./rootfs/etc/apt/sources.list ./rootfs/etc/apt/sources.list.bak

#编辑

sudo vim ./rootfs/etc/apt/sources.list


#换成如下内容:


# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free

# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free


deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free

# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free


deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

创建挂载脚本vim mount.sh


内容如下:


#!/bin/bash

mnt() {

echo 'MOUNTING'

sudo mount -t proc /proc ${2}proc

sudo mount -t sysfs /sys ${2}sys

sudo mount -o bind /dev ${2}dev

sudo mount -o bind /dev/pts ${2}dev/pts

sudo chroot ${2}

}

umnt() {

echo 'UNMOUNTING'

sudo umount ${2}proc

sudo umount ${2}sys

sudo umount ${2}dev/pts

sudo umount ${2}dev

}


if [ '$1' == '-m' ] && [ -n '$2' ] ;

then

mnt $1 $2

elif [ '$1' == '-u' ] && [ -n '$2' ];

then

umnt $1 $2

else

echo ''

echo 'Either 1'st, 2'nd or both parameters were missing'

echo ''

echo '1'st parameter can be one of these: -m(mount) OR -u(umount)'

echo '2'nd parameter is the full path of rootfs directory(with trailing '/')'

echo ''

echo 'For example: ch-mount -m /media/sdcard/'

echo ''

echo 1st parameter : ${1}

echo 2nd parameter : ${2}

fi


更改权限:


sudo chmod +x mount.sh 

挂载


source mount.sh -m ./rootfs/

执行以下命令


#

echo 'proc /proc proc defaults 0 0' >> etc/fstab 

设置Linux中的locale环境参数


export LC_ALL=C

如果不设置在后面安装软件时会有如下提示:


perl: warning: Setting locale failed.

perl: warning: Please check that your locale settings:

LANGUAGE = 'zh_CN:en_US:en',

LC_ALL = (unset),

LC_PAPER = 'zh_CN.UTF-8',

LC_NUMERIC = 'zh_CN.UTF-8',

LC_IDENTIFICATION = 'zh_CN.UTF-8',

LC_MEASUREMENT = 'zh_CN.UTF-8',

LC_NAME = 'zh_CN.UTF-8',

LC_TELEPHONE = 'zh_CN.UTF-8',

LC_ADDRESS = 'zh_CN.UTF-8',

LC_MONETARY = 'zh_CN.UTF-8',

LC_TIME = 'zh_CN.UTF-8',

LANG = 'zh_CN.UTF-8'

    are supported and installed on your system.

perl: warning: Falling back to the standard locale ('C').

/usr/bin/locale: Cannot set LC_CTYPE to default locale: No such file or directory

/usr/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or directory

/usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory

安装软件


apt update


apt install sudo

apt install net-tools

apt install ethtool 

apt install htop 

apt install ssh

......

设置用户


#设置root用户密码

passwd root

#添加新用户

adduser zzssdd2

设置以太网


echo 'auto eth0' > /etc/network/interfaces.d/eth0

echo 'iface eth0 inet dhcp' >> /etc/network/interfaces.d/eth0

设置IP和名称


echo 'zzssdd2-imx6ull' > /etc/hostname

echo '127.0.0.1 localhost' >> /etc/hosts

echo '127.0.0.1 zzssdd2-imx6ull' >> /etc/hosts

退出


#退出qemu环境

exit

# 取消挂载

source mount.sh -u ./rootfs/

#打包

sudo tar -zcvf debian_bullseye-rootfs.tar.gz ./rootfs/*

三、Buildroot

Buildroot是一个简单、高效且易于使用的工具,可以通过交叉编译生成嵌入式Linux系统。更详细的了解参考官方手册The Buildroot user manual


下面使用buildroot-2021.08.1版本对IMX6ULL平台进行配置。


下载:https://buildroot.org/download.html


解压 :tar -jxvf buildroot-2021.08.1.tar.bz2


进入图形配置界面:make menuconfig


注:下面贴出来的都是经过手动配置更改的选项,没有贴出来的则表示使用默认设置


配置Target options


Target options  ---> 

Target Architecture (ARM (little endian))

Target Binary Format (ELF)

Target Architecture Variant (cortex-A7)

Target ABI (EABIhf)

Floating point strategy (NEON/VFPv4)

ARM instruction set (ARM)

配置Toolchain


Toolchain  --->  

Toolchain type (External toolchain)

Toolchain (Custom toolchain)

Toolchain origin (Pre-installed toolchain)

(/usr/local/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf) Toolchain path 

($(ARCH)-none-linux-gnueabihf) Toolchain prefix 

    External toolchain gcc version (10.x)

    External toolchain kernel headers series (4.20.x)

    External toolchain C library (glibc/eglibc)

    [ ] Toolchain has RPC support? 

    [*] Toolchain has C++ support?

配置System configuration


System configuration  --->

(zzssdd2) System hostname 

(Hello zzssdd2) System banner

/dev management (Dynamic using devtmpfs + mdev) 

(root) Root password

(eth0) Network interface to configure through DHCP 

配置Target packages


这一步根据自己的需求选择安装需要的包即可(这里为了下一步编译快一些我保持默认选择)。


按需配置完成后:Save --> Exit --> 执行make命令等待编译完成后在Buildroot根目录下的output/images目录下可以看到编译好的根文件系统。


注意:


如果编译之前执行过make则需要先执行make clean清理一下再执行make命令,否则可能报错。

如果遇到某些包下载巨慢、下不动、下载失败的情况,可以根据编译信息提示的地址复制到浏览器手动下载。下载下来后将其复制到Buildroot根目录下的dl目录下,然后CTRL+C终止编译 --> make clean清除上次编译 --> make重新编译。

四、验证

参考开发板直连电脑搭建NFS&TFTP环境第四节


关键字:Linux  根文件系统  rootfs 引用地址:IMX6ULL - Linux根文件系统(rootfs)构建

上一篇:IMX6ULL - 移植linux-imx_5.4.70_2.3.0
下一篇:【IMX6ULL学习笔记】十九、Pinctrl、GPIO驱动驱动框架

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved