- 虚拟机环境
- 搭建虚拟机环境
电脑型号:
surface pro6 i5-8250U 8G内存256G硬盘
WIN11(先用官方镜像U盘重装家庭版,然后升级专业版):
版本 Windows 11 专业版
版本号 25H2
安装日期 2026/8/24
操作系统版本 26200.9168
功能包 Windows 功能体验包 1000.26100.344.0
虚拟机版本:
WSL 版本: 2.7.12.0
内核版本: 6.18.33.2-2
WSLg 版本: 1.0.73.2
MSRDC 版本: 1.2.7214
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows: 10.0.26200.9168
ubuntu版本:22.04
WSL网络配置 Mirrored,这样局域网的开发板可以直接访问WSL-ubuntu的服务器
2. 搭建tftp服务器
sudo apt-get install tftpd-hpa
sudo vi /etc/default/tftpd-hpa 后添加:TFTP_DIRECTORY="/home/lian/tftpboot"
(关闭防火墙,对应目录自己创建,权限放宽,把zImage和dtb拷进来)
sudo service tftpd-hpa restart 启动
3. 搭建nfs服务器
sudo apt-get install nfs-kernel-server
sudo vi /etc/exports 添加 /home/lian/nfs *(rw,sync,no_root_squash) 前面是自己的nfs目录,记得把目录权限打开;
4. 搭建编译环境
sudo apt install -y make bison flex libssl-dev lzop libncurses5-dev gcc
- 交叉工具
https://mirrors.cstcloud.cn/armbian-releases/_toolchain/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
TOOCHAIN="/home/lian/toolchain/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin"
export PATH=$PATH:$TOOCHAIN
注意这里要用绝对路径不然make 找不到
- Uboot
未测试
git clone GitHub - nxp-imx/uboot-imx: i.MX U-Boot · GitHub -b rel_imx_4.1.15_2.1.0_ga
make mx6ull_14x14_evk_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
uboot中相关配置如下:(我是用imx6ull直连电脑,电脑IP设置为192.168.3.9)
serverip=192.168.3.9
netmask=255.255.255.0
ipaddr=192.168.3.99
bootargs=console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.3.9:/home/lian/nfs,vers=3,proto=tcp ip=192.168.3.99::192.168.3.1:255.255.255.0::eth0:off rootwait
bootcmd=tftp 80800000 zImage; tftp 83800000 imx6ull-14x14-evk.dtb; bootz 80800000 - 83800000
- Linux
git clone GitHub - nxp-imx/linux-imx: i.MX Linux kernel · GitHub -b rel_imx_4.1.15_2.1.0_ga
make ARCH=arm imx_v7_defconfig
make ARCH=arm menuconfig 确认自己开发的芯片:
System Type ---> [*] Freescale i.MX family ---> [*] i.MX6 ULL support
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
编译报错重复yylloc,把其中一个加extern即可
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
cp arch/arm/boot/zImage /home/lian/tftpboot/
cp arch/arm/boot/dts/imx6ull-14x14-evk.dtb /home/lian/tftpboot/
- 文件系统
https://busybox.net/downloads/busybox-1.35.0.tar.bz2
make menuconfig:
Settings ---> --- Build Options () Cross compiler prefix (NEW)
然后输入arm-linux-gnueabihf-
Settings ---> --- Build Options [*] Build static binary (no shared libs) 静态库链接
make -j12
make install
cp _install/* ~/nfs/ -a
cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib ~/nfs/ -a //这是交叉编译工具的库
mkdir dev proc mnt sys tmp root
mkdir etc/init.d -p
vim etc/init.d/rcS 输入以下内容:
#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib export PATH LD_LIBRARY_PATH mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s
chmod 777 etc/init.d/rcS
vim etc/fstab
# proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0
vim etc/inittab
::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff -a
vim etc/profile
#!/bin/sh export HOSTNAME=SmartCar export USER=root export HOME=root export PS1="[$USER@$HOSTNAME \W]\# " PATH=/bin:/sbin:/usr/bin:/usr/sbin LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH export PATH LD_LIBRARY_PATH
- Vscode开发Linux环境搭建
通过vscode打开WSL的内核目录
VSCODE中安装clangd插件,并且弹窗提醒安装WSL的clangd插件
在wsl中安装bear
make clean
bear -- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
- 驱动编译脚本
ifeq($(KERNELRELEASE),)
X86_KERNEL_BUILD= /1ib/modules/$(shelluname -r)/build
ARM_KERNEL_BUILD= /home/lian/kernel/linux-imx
MODULE_PATH=$(shellpwd)
arm_module:
make -C$(ARM_KERNEL_BUILD)M=$(MODULE_PATH)modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
cp myDriver.ko /home/lian/nfs/test/
x86_module:
make -C$(X86_KERNEL_BUILD)M=$(MODULE_PATH)mOdules
clean:
make -C$(X86_KERNEL_BUILD)M=$(MODULE_PATH)clean
else
obj-m = myDriver.o
endif
解释:ARM_KERNEL_BUILD是Linux源码目录,myDriver对应驱动代码myDriver.c
输入make arm_module就会编译驱动代码,并且拷贝到/home/lian/nfs/test/目录