正点原子I.MX6ULL(v2.4版)移植NXP官方linux5.4内核

一、NXP官方linux内核

1. 下载

如果想直接使用的话可以去我的资源里面下载,想动手亲自移植的可以跟着步骤来

NXP官方linux仓库地址为:​ ​https://github.com/Freescale/linux-fslc/tree/5.4-2.1.x-imx​​。

选择该分支下载zip包即可,不要整个仓库下载,太大了:

2. 编译

sudo apt-get install lzop
sudo apt-get install libncurses5-dev

设置临时环境变量(编译器版本为7.5.0):

编译器使用的是,可以去官网下载

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

清理构建:

make distclean

查看arch/arm/configs目录下imx6ull相关的单板:

配置:

make imx_v7_defconfig

配置好之后编译:

make -j32

编译成功后,进入​​arch/arm/boot​​目录可以看到编译出的linux镜像,在dts目录下是编译出的设备树文件,找找evk的设备树:

3. 下载到开发板

将内核镜像和设备树文件拷贝到tftp根目录中:

cp zImage /home/book/linux/tftpboot
cp dts/imx6ull-14x14-evk-emmc.dtb /home/book/linux/tftpboot

接下来在开发板上进入uboot,确保bootargs环境变量的值如下:

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv

加载这两个文件:

tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk-emmc.dtb

启动内核:

bootz 80800000 - 83000000

4. 启动结果分析
因为EMMC中有出厂烧写的文件系统,所以Linux内核成功挂载了根文件系统,启动成功,但是也有一些问题:

LCD屏幕无显示;
网卡eth0报错,但是可以获取到ip,可以ping通主机;
接下来,我们就基于NXP官方提供的linux,针对正点原子imx6ull开发板进行一些配置参数的修改,修复LCD和网络问题。

二、移植linux内核

1. 新建单板

(1)新建单板配置文件

进入 arch/arm/configs 目录,复制一份新的单板文件:

cp arch/arm/configs/imx_v7_defconfig arch/arm/configs/imx_v7_atk_defconfig

 (2)新建设备树文件

进入 arch/arm/boot/dts 目录,复制一份新的设备树文件:

cp arch/arm/boot/dts/imx6ull-14x14-evk-emmc.dts arch/arm/boot/dts/imx6ull-14x14-atk-emmc.dts

 查看该文件,依赖于evk板子的设备树,需要将该文件也复制一份出来:注意修改依赖的名称为你所修改的imx6ull-14x14-atk.dts

cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-14x14-atk.dts

 接下来再看下一级依赖:我这里都是修改过的

cp arch/arm/boot/dts/imx6ul-14x14-evk.dtsi arch/arm/boot/dts/imx6ul-14x14-atk.dtsi

接着修改同级目录下的Makefile,添加新建的文件:

(3)编译测试

make distclean
make imx_v7_atk_defconfig
make

 使用新的内核和设备树启动,方便起见,设个环境变量,下次直接用命令启动:

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-14x14-atk-emmc.dtb;bootz 80800000 - 83000000'
saveenv

 2. 修改网络驱动

(1)修改SR8201F的复位引脚驱动

修改设备树文件​​arch/arm/boot/dts/imx6ul-14x14-atk.dtsi​​,搜索 GPIO5_IO07、GPIO5_IO08,发现已被spi4使用,删除这两行后,代码如下:

pinctrl_spi4: spi4grp {
fsl,pins = <
        MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10 0x70a1
        MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 0x70a1
>;
};

接着再找到spi4,删除与这两个GPIO相关的代码,删除后如下:

spi4 {
        compatible = "spi-gpio";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_spi4>;
        status = "okay";
        gpio-sck = <&gpio5 11 0>;
        gpio-mosi = <&gpio5 10 0>;
        num-chipselects = <1>;
        #address-cells = <1>;
        #size-cells = <0>;

        gpio_spi: gpio_spi@0 {
                compatible = "fairchild,74hc595";
                gpio-controller;
                #gpio-cells = <2>;
                reg = <0>;
                registers-number = <1>;
                registers-default = /bits/ 8 <0x57>;
                spi-max-frequency = <100000>;
        };
};

 接着将复位引脚加入到 pinctrl_enet1 节点的描述中:

MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10b0

 

接着将复位引脚加入到 pinctrl_enet2 的代码中:

MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10b0

 接着搜索fec1和fec2节点,添加网络驱动复位引脚使用,添加的代码如下:

phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
phy-reset-duration = <200>;

 

(2)修改SR8201F的PHY地址

修改mdio节点中的地址: 默认是2

至此,设备树修改完成。

根据 SR8201F 收据手册上的要求,SR8201F 在复位结束以

后需要等待至少 150ms 才能操作 SR8201F ,因此这里添加了一个 200ms 的延时。
修改fec_main.c这个文件下的fec_reset_phy函数
添加一个msleep(200);
这款网络芯片驱动相对来说比2.4之前的版本的好修改
使用ifconfig -a查看网络发现一下这种情况,需要使能网卡,和配置ip
ifconfig eth0 up
ifconfig eth1 up
ifconfig eth0 192.168.137.50(根据你的ubuntu来设置使它们处于同一网段)
ifconfig eth1 192.168.137.200
ping 192.168.137.100
至此,网络驱动修改成功。

3. 修改LCD驱动

本文用的是正点原子 7’ RGB屏幕,分辨率1024*600,设备树中找到lcdif节点的补充描述,改一下屏幕参数和时序即可:

         

&lcdif {
    assigned-clocks = <&clks IMX6UL_CLK_LCDIF_PRE_SEL>;
    assigned-clock-parents = <&clks IMX6UL_CLK_PLL5_VIDEO_DIV>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lcdif_dat
                       &pinctrl_lcdif_ctrl>;
    display = <&display0>;
    status = "okay";

    display0: display@0 {
        bits-per-pixel = <16>;
        bus-width = <24>;

        display-timings {
             native-mode = <&timing0>;

             timing0: timing0 {
                clock-frequency = <51200000>;
                        hactive = <1024>;
                        vactive = <600>;
                        hfront-porch = <160>;
                        hback-porch = <140>;
                        hsync-len = <20>;
                        vback-porch = <20>;
                        vfront-porch = <12>;
                        vsync-len = <3>;
                        hsync-active = <0>;
                        vsync-active = <0>;
                        de-active = <1>;
                        pixelclk-active = <0>;
            };
        };
    };
};

 重新编译设备树,启动,可以看到LCD左上角显示企鹅logo: 

如果开发板无法通过nfs挂载ubuntu24.04,可以参考:

解决开发板不能通过nfs挂载ubuntu24.04-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值