最近因为一些突发事情,硬盘损坏连带着系统盘一起BOM,只能重装系统,之前辛苦构建的平台也都付之一炬。重做系统后,又要重新构建一次完整的项目平台;对于我来说轻车熟路,不过考虑到其中涉及挺多步骤,虽然在整个第一章节各部分都有说明,不过内容分散,这里记录下安装的流程。
之前的从业经验来说,大部分情况都是使用VMvare虚拟机、vscode本地/远程修改的方式进行嵌入式Linux的开发。不过随着WSL2的完善,直接通过Hyper-V虚拟机实现Linux运行,在Windows下直接开发更加方便,存储也是根据使用大小自行扩展,不需要像虚拟机那样担心存储不够。虚拟机也能够扩容,不过是以新的盘的形式挂载,比在一个盘里使用麻烦了不少。所以现在,除了使用tftp/nfs的场景(WSL2桥接目前有些坑),很多SDK都使用WSL2进行编译,所以这里涉及WSL的安装。
注意: WSL2运行在Hyper-V虚拟机上,这个会和VMvare有兼容性问题;需要windows版本更新支持,且VMware安装也需要增加”WPH”驱动支持。有WSL2应用需求,先开启Hyper-V,升级安装WSL2,在进行VMware的安装,否则可能需要VMware进行修复安装或者卸载后重新安装。
更新windows系统,windows11是直接支持,不过对于windows10来说,需要使用19041.264或者以上版本。如果版本较低,可以使用微软的Windows Update软件,网址参考: https://www.microsoft.com/zh-cn/software-download/windows10;注意需要较新的CPU版本。
后续部分就是WSL2如何在Windows上的安装,流程可参考:WSL2安装步骤。
对于ubuntu安装,
VMware虚拟机选择15.5.5以后版本进行安装,早期版本和Windows的Hyper-V虚拟机进行安装。网上有相应教程,安装后输入购买的密钥即可。
对于Ubuntu系统,其实没有硬性要求,一些芯片官方提供的SDK可能使用早期版本,其实新版本也能用,Ubuntu 22.04、Ubuntu 24.04我也都用过,编译中出现问题我也能自己解决。入门者选择开发板SDK对应的Ubuntu即可,不过我这里根据个人习惯选择Ubuntu 22.04.05 LTS(这个版本会影响后续编译构建嵌入式端Debian/Ubuntu的版本,版本不同可能构建失败)。
关于Ubuntu 22.04 LTS的下载地址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/。
VMware选择>新建虚拟机>典型, 选择安装文件*.iso,按照流程下一步安装,直到完成即可。
注意: 除非能够很顺利的访问Ubuntu官方服务器,不要勾选”安装Ubuntu时更新”和”为图形或无线硬件,以及MP3和其它媒体安装第三方软件”。
更新DNS解析服务器
sudo vi /etc/resolv.conf
# 添加DNS服务器
nameserver 223.5.5.5
nameserver 8.8.8.8
nameserver 8.8.4.4
更新国内源,这里使用清华源
对于源地址,不要使用网络上分享的内容,使用源网站实时分享的内容,不要自己随意添加,可以保证安全性。
国内源地址: https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
对于22.04LTS选择如下。
# 配置apt源文件,修改内容指定
sudo vi /etc/apt/source.list
# 删除原内容,将上述内容复制到文件中
# https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
# 执行源更新和软件更新
sudo apt update
sudo apt upgrade
这一步主要进行完善ubuntu的程序和环境,方便后续进行软件平台的编译和构建。
安装必要的软件。
安装系统编译和构建的必要软件,可以解决后续编译时的大部分问题;这里列出我在进行编译时用到的工具和软件。
sudo apt-get install vim lib32z1 cmake ninja-build librust-glib-sys-dev -y
sudo apt-get install lz4 bc lzop libffi-dev libssl-dev git libdbus-1-dev -y
sudo apt-get install libncurses5-dev u-boot-tools openssh-server device-tree-compiler -y
sudo apt-get install dos2unix gzip libtool flex libpulse-dev libnl-3-dev -y
sudo apt-get install build-essential manpages-dev make bison util-linux-extra -y
sudo apt-get install software-properties-common binutils gcc-multilib -y
sudo apt-get install libc6-dev-i386 net-tools libsdl2-dev qemu-user-static -y
sudo apt-get install lsb-core lib32stdc++6 libncursesw5-dev lib32ncurses-dev -y
sudo apt-get install open-vm-tools open-vm-tools-desktop nfs-common -y
sudo apt-get install libgl1-mesa-dev texinfo lmbench libgdk-pixbuf2.0-dev -y
sudo apt-get install subversion zlib1g-dev gawk gettext libelf-dev ecj fastjar -y
sudo apt-get install expect expect-dev bzip2 libgmp-dev libmpc-dev texinfo -y
安装远程服务工具。
对于ubuntu来说,主要的远程服务工具有openssh、tftp、nfs软件,以及支持vscode远程访问,这四款软件可以说大幅度提高生产效率。
其中前三个软件的安装,可参考: Linux平台软件安装使用方法,不过这里还是整理下;这里只给出基础步骤,有问题可以参考相应安装解决。
# 安装软件
sudo apt-get install openssh-server xinetd tftp-hpa tftpd-hpa nfs-kernel-server -y
进行相应配置并重启。
(1).openssh配置
# openssh更新
sudo vim /etc/ssh/sshd_config
# 修改选项
PermitRootLogin yes
PasswordAuthentication yes
# 重启openssh
sudo service ssh restart
如果希望支持root登录,还需要给root用户配置密码,通过”passwd root”命令按照需求进行配置。
(2). tftp配置
# 增加tftp配置
# server_args: 指定tftp服务器读取地址
sudo vim /etc/xinetd.d/tftp
server tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /home/freedom/Desktop/user_git/sdk/tftp -c
per_source = 11
cps =100 2
flags =IPv4
}
# 修改tftp目录
sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
#此处指定tftp的映射目录
TFTP_DIRECTORY="/home/freedom/Desktop/user_git/sdk/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
# 重启tftp服务
sudo service tftpd-hpa restart
sudo service xinetd restart
(3). nfs配置
# 更新nfs配置
# 指定nfs服务器访问目录
sudo vim /etc/exports
# /home/freedom/.../nfs NFS共享目录
# * 表示允许所有网络段访问
# rw 表示访问者具有读写权限
# nohiden 表示共享子目录
# insercure 表示通过1024以上的端口通讯
# sync/async 资料同步/不同步缓存
# no_subtree_check 表示不检查父目录权限
# no_root_squash 表示访问者为root权限
/home/freedom/Desktop/Project/sdk/nfs *(rw,nohide,sync,no_root_squash)
vscode的官方下载地址为:https://code.visualstudio.com/Download,下载windwos版本。
点击左下角,选择connect to HOST,输入ssh登录地址:”
连接成功后,即可在windows中进行Linux服务器访问。
这一步是在系统上安装之前说的remote_manage的项目,构建SDK,安装工具链。
# 创建目录,用于后续项目管理
# 只所以选择这个目录,是因为后续的处理,脚本都是按照这个设计的,选择其它目录需要自行修改
mkdir /home/freedom/Desktop/user_git
cd /home/freedom/Desktop/user_git
# 从github下载项目
git clone https://github.com/zc110747/remote_manage.git
# 进入目录并执行,这一步会执行脚本,创建SDK目录和安装交叉编译工具
cd remote_manage/
chmod 777 preBuildEnvironment.sh && ./preBuildEnvironment.sh
# 在下载目录放置uboot,kernel安装包
cp uboot-imx-lf_v2022.04.tar.xz /home/freedom/Desktop/user_git/sdk/download
cp linux-imx-lf-6.1.y.zip /home/freedom/Desktop/user_git/sdk/download
# 再次执行安装uboot,kernel
./preBuildEnvironment.sh
# 解压buildroot到/home/freedom/Desktop/user_git/sdk/arm/rootfs/buildroot
# https://buildroot.org/downloads/buildroot-2024.02.1.tar.gz
tar -xvf buildroot-2024.02.1.tar.gz -C /home/freedom/Desktop/user_git/sdk/arm/rootfs/
# 重新打开命令行,此时可以使用
SysBuildUboot # 编译U-boot
SysBuildKernel # 编译kernel,拷贝到sdk/tftp中,支持tftp远程挂载
SysBuildRootfs # 编译buildroot rootfs
至此,一个简单的支持I.MX6ULL平台运行的Linux环境就搭建完成了;可以看到步骤并不困难,不过在真正的实践中,其实花费了挺多时间。在实际过程中,重装windows系统后,执行流程如下。
当然这里还有个简单的办法,就是使用VMware是关闭Hyper-V虚拟机,使用WSL2再开启。不过这只适合CPU型号较老,不支持新windows版本的机器,有能力还是共存比较好。可以看到,整个过程还是挺折腾的;之所以还算顺利,也是因为有过多次安装的经验,虽然有些遗忘但还记得大致步骤才没有被卡住;对于Linux环境的构建难度正是在此,实践中遇到问题,一定要知其所以然,并积累总结下来,不然问题会越积越多,花费更多时间。
直接开始下一章节:Linux平台问题解决方法