环境
Ubuntu24.04(6.8.0-36-generic)
linux-imx-lf-6.6.y
uboot-imx-lf_v2022.04
目录
2、fatal error: openssl/evp.h: 没有那个文件或目录
3、/bin/sh: 1: bison: not found
(2)在linux-imx-lf-6.6.y文件夹下新建firmware文件夹
3、 cfg80211: failed to load regulatory.db
(1)在linux-imx-lf-6.6.y文件夹下新建/lib/firmware文件夹
一、移植准备
参考文章(一)正点原子I.MX6ULL kernel6.1移植准备,其中用的是kernel6.1,我移植时已经更新到了6.6
二、移植u-boot
1、 ![](https://i-blog.csdnimg.cn/direct/4d1f3a7652f5478c8b09aa7d7f6103cb.png)
也不知道为啥没动过的u-boot会报错
include/ctype.h,打开后发现只有一行
linux/ctype.h
//修改为
#include <linux/ctype.h>
2、fatal error: openssl/evp.h: 没有那个文件或目录
sudo apt-get install libssl-dev
3、/bin/sh: 1: bison: not found
sudo apt-get install bison
sudo apt-get install flex(flex也要安装,不然编译时就要又报错找不到flex)
4、没有串口驱动(没有ttyUSB)
ls /dev/ttyUSB*
输入后没有结果,即检测不到串口
sudo dmesg | grep brltty
收到结果,即驱动被占用
[ 7033.078452] usb 1-13: usbfs: interface 0 claimed by ch341 while 'brltty'
卸载brltty
sudo apt remove brltty
sudo apt autoremove
最后插拔一下,不行就重启电脑
5、tftp下载失败(长时间不加载或出现TTT)
问题排查(以正点原子安装tftp为例)
(1)查看文件/etc/xinetd.d/tftp
sudo vim /etc/xinetd.d/tftp //vim用不了的用vi
红色字体写的是tftpboot的路径,在tftpboot文件夹下打开终端,输入pwd,回车出现的路径
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/herrian/linux/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
(2)查看文件/etc/default/tftpd-hpa
sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/herrian/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure -l -c -s"
(3)重启tftp服务器
sudo service tftpd-hpa restart
(4)给权限
//给文件夹权限
chmod 777 tftpboot
//给zImage权限
chmod 777 zImage
(5)开发板的环境变量
查看是否有ipaddr,eth1addr,netmask,serverip
serverip要写主机的ip地址!!!
打开设置,网络
点击有线右边的小齿轮,选择IPv4
将自动改为手动,并输入地址,子网掩码,网关。地址就是serverip!!!
三、移植内核
(三)正点原子I.MX6ULL kernel6.1挂根文件系统
1、imx6ull-alientek.dts
//删除
&ov5640 {status = "okay";
};
2、imx6ull-alientek.dtsi
//在&iomuxc中添加
pinctrl_peri_3v3: peri3v3grp {
fsl,pins = <
MX6UL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x1b0b0
>;
};
3、nfs版本问题
可以看到版本信息中不包含2。虽然可以降低内核兼容,这里推荐板子兼容nfs版本
在uboot命令行模式中修改环境变量
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.134:/home/herrian/linux/nfs/rootfs,proto=tcp,v4,rw rootwait ip=192.168.1.3:192.168.1.134:192.168.1.1:255.255.255.0::eth0:off'
红色字体为修改重点,v4代表兼容v4版本nfs
蓝色字体为主机的ip地址
紫色为根文件系统rootfs所在绝对路径
橙色为板子ip
四、根文件系统完善
修改linux-imx-lf-6.6.y文件
1、/etc/init.d/rcS: line 11: can't create /proc/sys/kernel/hotplug: nonexistent directory
//在defconfig里修改,imx_alientek_defconfig加上
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH="/sbin/mdev"
2、imx-sdma 20ec000.dma-controller: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2
(1)打开如下网址
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/imx/sdma/sdma-imx6q.bin
点击 plain 下载sdma-imx6q.bin
(2)在linux-imx-lf-6.6.y文件夹下新建firmware/imx/sdma文件夹,将下好的sdma-imx6q.bin放进去
(3)修改imx6ul.dtsi
//imx6ul.dtsi
sdma: dma-controller@20ec000 {
compatible = "fsl,imx6ul-sdma", "fsl,imx6q-sdma",
"fsl,imx35-sdma";
reg = <0x020ec000 0x4000>;
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_IPG>,
<&clks IMX6UL_CLK_SDMA>;
clock-names = "ipg", "ahb";
#dma-cells = <3>;
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx6q.bin";
};
(4)在imx_alientek_defconfig加上
CONFIG_EXTRA_FIRMWARE_DIR="firmware"
CONFIG_EXTRA_FIRMWARE="imx/sdma/sdma-imx6q.bin"
3、 cfg80211: failed to load regulatory.db
(1)在linux-imx-lf-6.6.y文件夹下新建/lib/firmware文件夹
(2)从 https://mirrors.edge.kernel.org/pub/software/network/wireless-regdb/ 下载最新的包,解压缩后需要将文件 regulatory.db 和 regulatory.db.p7s 复制到/lib/firmware中
(3) 修改imx_alientek_defconfig
CONFIG_CFG80211=y 修改为 CONFIG_CFG80211=m