泰山派Ubuntu系统编译简明教程
一、 编译环境 1、物理机配置: (1)CPU:INTEL I7 6700/4核8线程/2.8GHz (2)内存:16GB (3)硬盘:500GB 2、操作系统:Linux ubuntu-22.04.3-desktop-amd64 二、编译步骤 步骤1 下载Ubuntu系统SDK镜像文件 目标文件名:ubuntu-base-20.04.4-base-arm64.tar.gz 下载网址:http://cdimage.ubuntu.com/ubuntu-base/releases/20.04.4/release/ 步骤2 解压Ubuntu系统SDK镜像文件 (1)新建文件夹,作为目标系统文件夹 命令:sudo mkdir ubuntu_rootfs (2)解压SDK镜像文件 命令:sudo tar -zxvf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu_rootfs 步骤3 配置仿真开发环境qemu (1)在当前编译环境中安装仿真开发环境 命令:sudo apt install qemu-user-static (2)将当前编译环境中的仿真开发环境复制到目标系统文件夹 命令:sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin/ 步骤4 配置网络 将当前编译环境中的网络配置文件复制到目标系统文件夹 命令:sudo cp /etc/resolv.conf ubuntu_rootfs/etc/ 步骤5 更换目标系统中的软件源 (1)修改目标系统中的软件源配置文件 命令:sudo vim ubuntu_rootfs/etc/apt/sources.list (2)添加阿里云软件源 命令: deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted deb http://mirrors.aliyun.com/ubuntu-ports/ focal universe deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates universe deb http://mirrors.aliyun.com/ubuntu-ports/ focal multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security universe deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security multiverse 步骤6 挂载根文件系统 (1)编写挂载脚本 命令:sudo vim mount.sh 挂载脚本文件内容: #!/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 -t devpts -o gid=5,mode=620 devpts ${2}dev/pts sudo mount -o bind /dev/pts ${2}dev/pts sudo chroot ${2} } 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 tralling '/')" echo "" echo "For example: ch-mount -m /media/sdcard" echo "" echo 1st parameter : ${1} echo 2nd parameter : $[2] fi (2)添加脚本执行权限 命令:sudo chmod +x mount.sh (3)挂载根文件系统 命令:./mount.sh -m ubuntu_rootfs/ 【备注】当完成根文件系统挂载后,后续命令将在根文件系统中执行,直至根文件系统被卸载(步骤16) 步骤7 在根文件系统中安装必要的软件 (1)更新安装软件包列表 命令:apt update (2)更新和升级软件包 命令:apt upgrade (3)在目标系统中安装必要的软件 命令:apt install sudo vim udev net-tools ethtool udhcpc netplan.io language-pack-en-base language-pack-zh-han* iputils-ping openssh-sftp-server ntp usbutils alsa-utils libmtp9 【备注】安装过程中会提示配置地区和时区 (1)亚洲地区选择“6,Asia” (2)中国时区选择:70,Shanghai (3)该步骤下,你可以根据自己的需求,安装所需要的应用软件 步骤8 桌面环境安装 安装轻量级的桌面环境 lubuntu-desktop 命令:apt install lubuntu-desktop 【备注】如果安装过程中提示缺少依赖的组件,可以使用apt命令安装该组件后,再次执行上述命令 步骤9 卸载部分不必要的软件 (1)卸载更新通知组件并清除相关配置文件 命令:apt-get remove --purge lubuntu-update-notifier (2)卸载办公套件并清除相关配置文件 命令:apt-get remove --purge libreoffice* 步骤10 添加用户并配置权限 (1)在目标系统中添加用户 命令:adduser ubuntu 【备注】ubuntu为用户名,可以按照需要修改为任意其他名称 (2)为用户添加管理员权限 命令:adduser ubuntu sudo (3)修改用户密码 命令:passwd ubuntu 【备注】执行命令后,需要输入2遍口令 (4)修改root用户密码 命令:passwd root 步骤11 允许root用户登录桌面 (1)修改配置文件,允许root用户登录桌面 命令:vim /etc/gdm3/custom.conf 增加的配置文件内容: AutomaticLoginEnable = true AutomaticLogin = ubuntu AllowRoot=true 修改后的效果: (2)修改配置文件,取消默认情况下不让ROOT用户登录的限制 命令:vim /etc/pam.d/gdm-password 注释掉的配置文件内容: #auth required pam_succeed_if.so user != root quiet_success 修改后的效果: (3)修改桌面自动登录脚本文件,将autologin-user项修改成自己的用户名 命令:vim /etc/lightdm/lightdm.conf.d/20-autologin.conf 修改后的效果: 【备注】此处的用户名需要与步骤10中添加的用户名保持一致 步骤12 串口自动登录 命令:vim /lib/systemd/system/serial-getty\@.service 修改的配置文件内容: (1)注释:ExecStart=-/sbin/agetty -o ‘-p – \u’ --keep-baud 115200,38400,9600 %I $TERM (2)修改:ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM 修改后的效果: 步骤13 关闭自动休眠 命令:sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target 步骤14 修改开机等待网络延迟时间 默认情况下,系统启动过程中会出现“A start job is running for wait for network to be Configured”的提示信息,然后开始倒计时5分钟,需要等待倒计时结束后才能继续启动系统,通过修改配置文件,将倒计时时间缩短到5秒或关闭倒计时。 命令:vim /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service 修改的配置文件内容: ExecStart=/usr/bin/nm-online -s -q --timeout=0 步骤15 添加分区释放的系统服务(重要) 默认情况下,rootfs分区烧录后,只有固件本身大小。通过添加系统服务,实现分区释放。 (1)修改配置文件 命令:vim etc/init.d/resize2fs.sh 修改的配置文件内容: #!/bin/bash-e# resize filesystem mmcblk0p6 if [ ! -e "/usr/local/boot_flag" ] ; then echo "Resizing /dev/mmcblk0p6..." resize2fs /dev/mmcblk0p6 touch /usr/local/boot_flag fi (2)添加配置文件执行权限 命令:chmod +x etc/init.d/resize2fs.sh (3)创建执行上述脚本的系统服务 命令:vim lib/systemd/system/resize2fs.service 系统服务的内容: #start [Unit] Description=Setup rockchip platform environment Before=lightdm.service After=resize-helper.service [Service] Type=simple ExecStart=/etc/init.d/resize2fs.sh [Install] WantedBy=multi-user.target #end 步骤16 退出并卸载根文件系统 (1)退出根文件系统 命令:exit (2)卸载根文件系统 命令:sudo ./mount.sh -u ubuntu_rootfs/ 步骤17 制作文件系统rootfs分区固件 (1)创建空镜像文件 命令:sudo dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=8192 【备注】镜像文件的大小,需要大于上述根文件系统所在文件夹ubuntu_rootfs的整体大小,可以通过du命令查看ubuntu_rootfs 文件夹的大小,然后通过设置count项的值,配置合适的镜像文件大小。 (2)将创建的镜像文件格式化为.ext4文件系统 命令:sudo mkfs.ext4 ubuntu_rootfs.img (3)新建一个文件夹,用于挂载 命令:sudo mkdir ubuntu_base_rootfs 【备注】上述文件夹名称ubuntu_base_rootfs可以按照需要修改为任意名称 (4)为上述文件夹添加权限 命令:sudo chmod 777 ubuntu_base_rootfs (5)将创建的空白镜像文件挂载到上述文件夹 命令:sudo mount ubuntu_rootfs.img ubuntu_base_rootfs (6)将之前根文件系统所在文件夹内容全部复制到新建的空文件夹 命令:sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/ (7)卸载镜像文件 命令:sudo umount ubuntu_base_rootfs/ (8)修复及检测镜像文件系统 命令:sudo e2fsck -p -f ubuntu_rootfs.img (9)压缩镜像文件的大小 命令:sudo resize2fs -M ubuntu_rootfs.img 【备注】上述的2.8小节中的释放rootfs分区大小与这里减少文件大小相关。 (10)查看镜像文件的大小 命令:sudo du -sh ubuntu_rootfs.img 步骤18 后续… 可以直接将上述ubuntu_rootfs.img镜像文件,通过瑞芯微开发工具的“下载镜像”功能,单独烧录进泰山派开发板。 或者,也可以将上述镜像文件复制到之前编译好的buildroot系统的rockdev文件夹下,然后通过执行build.sh updateimg脚本,打包成统一的update.img镜像文件,通过瑞芯微开发工具的“升级固件”功能,烧录进泰山派开发板。 三、编译成果 【备注】 根据嘉立创吴工指导、网上大佬教程及本人实践总结编写,难免存在错误,请大家(佬)批评指正。 \n#学习资料#
泰山派Linux 系统编译简明教程
一、 编译环境 1、物理机配置: (1)CPU:INTEL I7 6700/4核8线程/2.8GHz (2)内存:16GB (3)硬盘:500GB 2、操作系统:Linux ubuntu-22.04.3-desktop-amd64 二、编译步骤 步骤1 下载Linux系统SDK镜像文件 目标文件名:tspi_linux_sdk_20230916.tar.gz (包含在泰山派开发板资料包中的“第05章.【立创·泰山派】系统SDK”文件夹下的“【SDK】Linux”文件夹里) 步骤2 将镜像文件复制到编译环境中 方法1. 通过SSH工具软件中带的TFTP 方法2. 通过SAMBA协议建立磁盘映射 步骤3 解压缩镜像文件 命令:sudo tar -zxvf tspi_linux_sdk_20230916.tar.gz (随后输入ROOT用户口令,如果不想显示解压缩日志,可以将“-”后面的参数“v”去掉,该命令运行需要耐心等待) 步骤4 编译环境配置 命令:sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect \ g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \ qemu-user-static live-build bison flex fakeroot cmake gcc-multilib \ g++-multilib unzip device-tree-compiler ncurses-dev (上述命令需要逐行复制粘贴,每行结尾处的“\”表明该命令尚未结束,下一行会出现“>”符号,可以接着输入下一行命令内容。该条命令目的是安装系统编译所需要的相关软件,共计97项) 步骤5 泰山派SDK板级配置 方法1. 确认当前目录为包含“build.sh”文件的目录,执行命令: sudo ./build.sh device/rockchip/rk356x/BoardConfig-rk3566-tspi-v10.mk 方法2. 执行命令:sudo ./build.sh lunch,然后选择BoardConfig-rk3566-tspi-v10.mk,这里序列号是3。 (完成上述配置命令后,检查配置是否生效,命令如下:sudo ./build.sh -h kernel) 步骤6 系统编译 【1】设置环境变量,选择buildroot文件系统,命令如下: export RK_ROOTFS_SYSTEM=buildroot (注意,该命令无需root权限,即不需要加“sudo”) 【2】执行全编译,命令如下: sudo ./build.sh all –j8 错误1 缺python2 解决方法:安装python 命令:sudo apt-get install python 错误2 /usr/bin/env路径下找不到python执行文件 解决方法:设置软链接(类似于快捷方式) 命令:sudo ln -s /usr/bin/python3 /usr/bin/python 【3】配置电源域(按照手册配置) 错误3 指定路径下缺少.config文件 解决方法:重新执行编译命令 命令:sudo ./build.sh all –j8 错误4 该命令不能用root用户执行 解决方法:在environment文件中添加忽略检测命令 命令:FORCE_UNSAFE_CONFIGURE=1 错误5 宏定义重复声明错误 解决方法:把mksquashfs.h头文件中声明的宏,前面加上extern修饰符。然后把那个文件夹下面所有的.o文件都删除,再重新编译 命令: (1)查找文件:sudo find -name "mksquashfs.o" (2)删除文件:sudo rm 完整路径+mksquashfs.o 错误6 缺少配置文件 解决方法:单独编译RECOVERY 命令:sudo ./build.sh recovery –j8 错误7 同错误5 解决方法:把mksquashfs.h头文件中声明的宏,前面加上extern修饰符。然后把那个文件夹下面所有的.o文件都删除,再重新编译(注意:这次通过查找会找到2个路径下的结果,要删除路径中带“recovery”的那个) 命令: (1)查找文件:sudo find -name "mksquashfs.o" (2)删除文件:sudo rm 完整路径+mksquashfs.o 三、编译成果 【备注】根据嘉立创吴工授课及本人实践总结编写, 难免存在错误, 请大家(佬) 批评指正。 \n#学习资料#
【正式入驻】
谨以此贴,为正式入驻嘉立创社区留痕! #中秋月圆社区团圆#