嵌入式主板移植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中。

其他

  1. 制作根文件系统

    版本 代号
    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/
    # 进入根文件系统后,后续操作都是在根文件系统中进行
    
  2. 设置更新源

    编辑/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
    
  3. 安装软件

    apt update
    apt install sudo vim iputils-ping net-tools network-manager
    
  4. 添加用户

    # 添加用户
    adduser username
    # 添加用户到sudo用户组,可以使用sudo命令
    usermod -a -G sudo username
    # 设置新增加的用户密码
    passwd username
    # 设置root密码
    passwd root
    
  5. 修改/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
    
  6. 退出和卸载根文件系统

    # 在根文件系统中使用exit命令退出到本地Linux环境
    exit
    # 在本地Linux中再调用mount.sh脚本,使用-u选项卸载掉根文件系统,注意文件路径后面要带“/”
    sudo ./mount.sh -u rootfs_path/
    
  7. 挂载和卸载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
    
posted @ 2024-11-08 01:44  LM358  阅读(159)  评论(0)    收藏  举报