嵌入式主板移植Ubuntu根文件系统
广告机主板适配Linux说明
通用启动镜像说明
烧写镜像分为三个部分,第一部分为Uboot引导,地址范围为镜像起始的10M空间,按照对应的SOC启动地址要求将Uboot启动文件烧写到对应的偏移地址;第二部分为Linux启动分区,起始地址为Uboot引导结束的地方,大小为40MB,格式化为FAT32文件系统,内部包含boot文件夹和extlinux文件夹,boot文件夹中包含Linux系统镜像和设备树文件,extlinux文件夹中包含启动脚本extlinux.conf,用于指定设备树文件和启动参数;第三部分为Linux根文件系统,起始地址为启动分区结束的地方,大小为镜像文件剩余空间,格式化为EXT4文件系统,内部包含根文件系统。
烧写镜像可在Linux下通过dd命令烧写到SD卡或在windows下通过软件烧写到SD卡,若想烧写到EMMC中,需先用SD卡或通过NFS启动linux系统,在linux中再将烧写镜像通过dd命令烧写到EMMC中。
其他
-
制作根文件系统
版本 代号 18 bionic 20 buster 22 jammy 使用debootstrap下载镜像
# 安装相关依赖 sudo apt-get install debian-archive-keyring gcc-aarch64-linux-gnu bison flex bc build-essential libncurses* libssl-dev sudo apt-get install qemu qemu-user-static binfmt-support debootstrap # 下载镜像 sudo debootstrap --arch [平台] [发行版本代号] [构建目录] [镜像地址] # ARM架构 sudo qemu-debootstrap --arch armhf --variant=minbase --include=whiptail,ca-certificates,tzdata bionic ubuntu-armhf http://mirrors.ustc.edu.cn/ubuntu-ports/ # ARM64架构 sudo qemu-debootstrap --arch arm64 --variant=minbase --include=whiptail,ca-certificates,tzdata bionic ubuntu-arm64 http://mirrors.ustc.edu.cn/ubuntu-ports/
在服务器上挂载文件系统并进行设置,使用以下脚本
#!/bin/bash # function 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 echo "CHROOT..." sudo chroot ${2} echo "Success!" } function 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 # 调用脚本,使用-m选项挂载下载的根文件系统到本地Linux环境,主要根文件系统路径最后需要加“/” sudo ./mount.sh -m rootfs_path/ # 进入根文件系统后,后续操作都是在根文件系统中进行
-
设置更新源
编辑/etc/apt/source.list文件,修改为以下内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse # 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换 deb http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse # deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
-
安装软件
apt update apt install sudo vim iputils-ping net-tools network-manager
-
添加用户
# 添加用户 adduser username # 添加用户到sudo用户组,可以使用sudo命令 usermod -a -G sudo username # 设置新增加的用户密码 passwd username # 设置root密码 passwd root
-
修改/etc/resolv.conf文件
# 删除原来的文件 rm /etc/resolv.conf # 重新创建一个链接指向lib文件夹里的reslov.conf文件 ln -s /lib/system/resolv.conf /etc/resolv.conf # 修改/etc/reslov.conf文件,添加一行 nameserver 8.8.8.8
-
退出和卸载根文件系统
# 在根文件系统中使用exit命令退出到本地Linux环境 exit # 在本地Linux中再调用mount.sh脚本,使用-u选项卸载掉根文件系统,注意文件路径后面要带“/” sudo ./mount.sh -u rootfs_path/
-
挂载和卸载img文件到文件系统
# 创建loop设备 sudo losetup --partscan --find --show xxx.img # 挂载loop设置 sudo mount /dev/loopxxpx xxx/mount_path # 复制根文件系统到img镜像中 cp rootfs_path/* -rfp xxx/mount_path sync # 卸载loop设备 sudo umount /dedv/loopxxpx sudo losetup -d /dev/loopxx