文章目录
前言
使用buildroot编译时总是遇到些错误不好解决,编译的时间又长。。。
一、镜像下载
使用阿里云
https://mirrors.aliyun.com/ubuntu-cdimage/ubuntu-base/releases/22.04.5/release/?spm=a2c6h.25603864.0.0.22a82ee4I5CpWP
防止权限错误,先进入root环境
sudo su
创建目录
mkdir ubuntu22-rootfs
mkdir ubuntu22-base
解压
tar -zxvf ubuntu-base-22.04.5-base-armhf.tar.gz -C ubuntu22-base
安装必要插件
sudo apt install qemu-user-static
适用于32即arm架构
cp /usr/bin/qemu-arm-static ubuntu22-base/usr/bin/
适用于aarch64即arm64架构
cp /usr/bin/qemu-aarch64-static ubuntu22-base/usr/bin/
拷贝dns设置
cp -b /etc/resolv.conf ubuntu22-base/etc/resolv.conf
换源
nano ubuntu22-base/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
ctrl+o保存
ctrl+x退出
编写挂载/卸载脚本mount.sh
#!/bin/bash
function mnt() {
echo "MOUNTING"
mount -t proc /proc ${2}proc
mount -t sysfs /sys ${2}sys
mount -o bind /dev ${2}dev
#mount -t devpts -o gid=5,mode=620 devpts ${2}dev/pts
mount -o bind /dev/pts ${2}dev/pts
chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
umount ${2}proc
umount ${2}sys
umount ${2}dev/pts
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
挂载并进入arm的根文件系统
./mount.sh -m ubuntu22-base/
使用uname -a查看是否挂载成功
有armv7等字样
更新系统
apt update
apt upgrade
定制自己需要的功能
apt install locales tzdata -y
# 时区选择
# Asia/Shanghai
dpkg-reconfigure locales
# 勾选英文和中文环境
# en_US.UTF-8 UTF-8
# zh_CN.UTF-8 UTF-8
apt install language-pack-en-base #这个必须要否则无法生成/etc/network/interfaces配网文件
apt install apt-utils dialog -y
apt install vim nano sudo -y
apt install bash-completion -y
apt install net-tools iputils-ping ifupdown ethtool -y
apt install wireless-tools network-manager -y
apt install ssh rsync udev htop rsyslog -y
配置网络
nano /etc/network/interfaces
source-directory /etc/network/interfaces.d #以太网
auto eth0
iface eth0 inet dhcp
#wifi
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_config.conf
nano /etc/resolv.conf
nameserver 8.8.8.8
nameserver 114.114.114.114
添加用户及设置密码
添加用户:
useradd -s '/bin/bash' -m -G adm,sudo lckfb
nano /etc/sudoers
lckfb ALL=(ALL:ALL) ALL
给用户设置密码:
passwd lckfb
给root用户设置密码:
passwd root
echo "lckfb" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 lckfb" >> /etc/hosts
修改开关机等待时间
nano /lib/systemd/system/networking.service
TimeoutStartSec=5min 修改为TimeoutStartSec=5sec。
nano /etc/systemd/system.conf
解除 DefaultTimeoutStopSec=90s 注释,改为DefaultTimeoutStopSec=2s。
修改完自己的根文件系统就可以退出了
exit
./mount.sh -u ubuntu22-base/
安装rk3566驱动
编译开发板厂商提供的SDK中的kernel
/*先用厂商提供的build.sh配置开发板,然后编译内核,进入SDK中的kernel目录,执行下列命令安装驱动*/
make ARCH=arm modules_install INSTALL_MOD_PATH=/home/yw/ubuntu22-base
配置/etc/fstab
1. 什么是 /etc/fstab
/etc/fstab 文件是 Linux 系统中用于定义和管理文件系统的挂载信息的配置文件。它的作用是告诉系统在启动时,应该如何自动挂载各种文件系统。挂载是 Linux 操作系统中一种将存储设备与目录树关联的操作。通过挂载,存储设备中的文件可以通过目录访问。
2. /etc/fstab 文件的格式
/etc/fstab 文件的每一行描述了一个文件系统或设备的挂载信息,通常由 6 个字段组成,每个字段通过空格或制表符分隔。字段的顺序非常重要,具体如下:
<设备文件> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>
拷贝官方SDK中buildroot中生成的fstab文件(需要先编译SDK的buildroot)
cp -f Lyra-sdk/buildroot/output/rockchip_rk3506_luckfox/target/etc/fstab ubuntu22-base/etc/
fstab文件中的内容
# <file system> <mount pt> <type> <options> <dump> <pass>
/dev/root / ext4 rw,noauto 0 1
tmpfs /tmp tmpfs mode=1777 0 0
tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
tmpfs /var/log tmpfs mode=0755,nosuid,nodev 0 0
proc /proc proc defaults 0 0
devtmpfs /dev devtmpfs defaults 0 0
devpts /dev/pts devpts mode=0620,ptmxmode=0000,gid=5 0 0
tmpfs /dev/shm tmpfs nosuid,nodev,noexec 0 0
sysfs /sys sysfs nosuid,nodev,noexec 0 0
configfs /sys/kernel/config configfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
pstore /sys/fs/pstore pstore nosuid,nodev,noexec 0 0
制作根文件系统
查看我们制作的ubuntu22-base大小
cd ubuntu22-base
du -h --max-depth=1
cd ..
制作自己的根文件系统,大小依据自己的根文件系统而定,注意依据 ubuntu22-base文件夹的大小来修改 count 值,因为我们这里的大小为690M所以count=1024保证大于我们的ubuntu22-base
rm linux-rootfs.img
dd if=/dev/zero of=linux-rootfs.img bs=1M count=1024
mkfs.ext4 linux-rootfs.img
mount linux-rootfs.img ubuntu22-rootfs
cp -rfp ubuntu22-base/* ubuntu22-rootfs/
umount ubuntu22-rootfs
e2fsck -p -f linux-rootfs.img
resize2fs -M linux-rootfs.img
调开发板整分区大小
在开发板上运行后,发现存储空间不对,在开发板上执行以下命令
df -h 查看当前系统分区大小
lsblk 查看当前硬盘分区大小
resize2fs /dev/mmcblk0p3 调整分区(改为自己的)
我的开发板上只显示956M,实际应该是8G的emmc
第三分区挂载到/目录,大小为7.2G
切换root,并调整分区
添加终端补全
nano /etc/bash.bashrc
总结
换源注意使用:http://**