正点原子I.MAX6ULL kernel6.6移植遇到的问题

环境

Ubuntu24.04(6.8.0-36-generic)

linux-imx-lf-6.6.y

uboot-imx-lf_v2022.04

目录

一、移植准备

二、移植u-boot

1、 ​编辑

2、fatal error: openssl/evp.h: 没有那个文件或目录

3、/bin/sh: 1: bison: not found

 4、没有串口驱动(没有ttyUSB)

 5、tftp下载失败(长时间不加载或出现TTT)

问题排查(以正点原子安装tftp为例)

(1)查看文件/etc/xinetd.d/tftp

 (2)查看文件/etc/default/tftpd-hpa

 (3)重启tftp服务器

 (4)给权限

 (5)开发板的环境变量

 serverip要写主机的ip地址!!!

 三、移植内核

1、imx6ull-alientek.dts

 2、imx6ull-alientek.dtsi

3、nfs版本问题

四、根文件系统完善

修改linux-imx-lf-6.6.y文件1、/etc/init.d/rcS: line 11: can't create /proc/sys/kernel/hotplug: nonexistent directory

2、imx-sdma 20ec000.dma-controller: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2

(1)打开如下网址

(2)在linux-imx-lf-6.6.y文件夹下新建firmware文件夹

(3)修改imx6ul.dtsi

 (4)在imx_alientek_defconfig加上

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


一、移植准备

参考文章(一)正点原子I.MX6ULL kernel6.1移植准备,其中用的是kernel6.1,我移植时已经更新到了6.6

二、移植u-boot

(二)正点原子I.MX6ULL u-boot移植

1、

也不知道为啥没动过的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

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值