[IMX6ULL]移植NXP Linux Kernel 5.15

移植NXP Linux Kernel 5.15

2024-7-7

hongxi.zhu

1. 下载NXP Linux Kernel 5.15

仓库[nxp-imx/linux-imx]

git clone -b lf-5.15.y https://github.com/nxp-imx/linux-imx.git 

2. 编译NXP Linux Kernel 5.15

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

3. 烧写NXP Linux Kernel 5.15

编译生成

arch/arm/boot/dts/imx6ull-14x14-evk-emmc.dtb
arch/arm/boot/zImage

使用tftp方式下载上面两个文件到板子上(uboot移植看前面的文章)

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-evk-emmc.dtb; bootz 80800000 - 83000000'
saveenv
boot

4. 适配正点原子Alpha板子

4.1 新建单板配置文件

cp ./arch/arm/configs/imx_v7_defconfig ./arch/arm/configs/imx6ull_alpha_emmc_defconfig

4.2 新建单板设备树文件

cp ./arch/arm/boot/dts/imx6ull-14x14-evk-emmc.dts ./arch/arm/boot/dts/imx6ull-14x14-alpha-emmc.dts
cp ./arch/arm/boot/dts/imx6ull-14x14-evk.dts ./arch/arm/boot/dts/imx6ull-14x14-alpha.dts
cp ./arch/arm/boot/dts/imx6ul-14x14-evk.dtsi ./arch/arm/boot/dts/imx6ul-14x14-alpha.dtsi
  • 修改imx6ull-14x14-alpha.dts
/dts-v1/;#include "imx6ull.dtsi"
#include "imx6ul-14x14-alpha.dtsi"/ {model = "Freescale i.MX6 ULL 14x14 EVK Board";compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
};
...
  • 修改imx6ull-14x14-alpha-emmc.dts
#include "imx6ull-14x14-alpha.dts"&usdhc2 {pinctrl-names = "default", "state_100mhz", "state_200mhz";pinctrl-0 = <&pinctrl_usdhc2_8bit>;pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>;pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>;bus-width = <8>;non-removable;status = "okay";
};
  • 修改dts目录下的Makefile, 添加imx6ull-14x14-alpha-emmc.dts
	...imx6ull-14x14-evk.dtb \imx6ull-14x14-evk-emmc.dtb \imx6ull-14x14-alpha-emmc.dtb \imx6ull-14x14-evk-btwifi.dtb \imx6ull-14x14-evk-btwifi-sdio3_0.dtb \imx6ull-14x14-evk-gpmi-weim.dtb \...

4.3 编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6ull_alpha_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

4.4 烧录

修改uboot中tftp配置

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-alpha-emmc.dtb; bootz 80800000 - 83000000'
saveenv
boot

正常引导效果:

=> setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-alpha-emmc.dtb; bootz 80800000 - 83000000'
=> saveenv
Saving Environment to MMC... Writing to MMC(0)... OK
=>
=>
=> boot
ethernet@20b4000 Waiting for PHY auto negotiation to complete.... done
Using ethernet@20b4000 device
TFTP from server 192.168.3.32; our IP address is 192.168.3.38
Filename 'zImage'.
Load address: 0x80800000
Loading: #############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################1.1 MiB/s
done
Bytes transferred = 9574272 (921780 hex)
Using ethernet@20b4000 device
TFTP from server 192.168.3.32; our IP address is 192.168.3.38
Filename 'imx6ull-14x14-alpha-emmc.dtb'.
Load address: 0x83000000
Loading: ###2 MiB/s
done
Bytes transferred = 35807 (8bdf hex)
Kernel image @ 0x80800000 [ 0x000000 - 0x921780 ]
## Flattened Device Tree blob at 83000000Booting using the fdt blob at 0x83000000Using Device Tree in place at 83000000, end 8300bbde
Modify /soc/bus@2200000/epdc@228c000 disabledStarting kernel ...[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.15.71-dirty (hongxi@hongxi-virtual-machine) (arm-linux-gnueabihf-gcc (Linaro GCC 7.5-2019.12) 7.5.0, GNU ld (Linaro_Binutils-2019.12) 2.28.2.20170706) #1 SMP PREEMPT Sun Jul 7 16:24:28 CST 2024
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Freescale i.MX6 ULL 14x14 EVK Board
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] Reserved memory: created CMA memory pool at 0x96000000, size 160 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000080000000-0x000000009fffffff]
...

4.5 适配alpha的网口

4.5.1 修改设备树

arch/arm/boot/dts/imx6ul-14x14-alpha.dtsi

	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@0 {compatible = "fairchild,74hc595";gpio-controller;#gpio-cells = <2>;reg = <0>;registers-number = <1>;registers-default = /bits/ 8 <0x57>;spi-max-frequency = <100000>;};};...pinctrl_spi4: spi4grp { /*删除gpio5-7 gpio5-8的声明*/fsl,pins = <MX6UL_PAD_BOOT_MODE0__GPIO5_IO10	0x70a1MX6UL_PAD_BOOT_MODE1__GPIO5_IO11	0x70a1>;};/*eth1-phy reset*/pinctrl_enet1_reset: enet1resetgrp {fsl,pins = <MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0  /*gpio5-7*/>;};/*eth2-phy reset*/pinctrl_enet2_reset: enet2resetgrp {fsl,pins = <MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0  /*gpio5-8*/>;};pinctrl_enet1: enet1grp {fsl,pins = <MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN	0x1b0b0MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER	0x1b0b0MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00	0x1b0b0MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01	0x1b0b0MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN	0x1b0b0MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00	0x1b0b0MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01	0x1b0b0MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x4001b031 /*eth1_phy clk*/>;};pinctrl_enet2: enet2grp {fsl,pins = <MX6UL_PAD_GPIO1_IO07__ENET2_MDC		0x1b0b0MX6UL_PAD_GPIO1_IO06__ENET2_MDIO	0x1b0b0MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN	0x1b0b0MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER	0x1b0b0MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00	0x1b0b0MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01	0x1b0b0MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN	0x1b0b0MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00	0x1b0b0MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01	0x1b0b0MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2	0x4001b031 /*eth2_phy clk*/>;};
...
&fec1 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_enet1  &pinctrl_enet1_reset>;phy-mode = "rmii";phy-handle = <&ethphy0>;phy-supply = <&reg_peri_3v3>;phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>; /*增加gpio5-7 用于reset phy 0*/phy-reset-duration-us = <200>;  /*增加reset的delay属性*/status = "okay";
};&fec2 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_enet2  &pinctrl_enet2_reset>;phy-mode = "rmii";phy-handle = <&ethphy1>;phy-supply = <&reg_peri_3v3>;phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; /*增加gpio5-8 用于reset phy 1*/phy-reset-duration-us = <200>;  /*增加reset的delay属性*/status = "okay";mdio {#address-cells = <1>;#size-cells = <0>;ethphy0: ethernet-phy@0 {  /*地址和reg都改为0*/compatible = "ethernet-phy-id0022.1560";reg = <0>;micrel,led-mode = <1>;clocks = <&clks IMX6UL_CLK_ENET_REF>;clock-names = "rmii-ref";};ethphy1: ethernet-phy@1 {   /*不改,原本就是1*/compatible = "ethernet-phy-id0022.1560";reg = <1>;micrel,led-mode = <1>;clocks = <&clks IMX6UL_CLK_ENET2_REF>;clock-names = "rmii-ref";};};
};
...

目前不使用这一路SPI,EVK的板子这是一路GPIO拓展的功能,alpha板子没有使用,直接disabled,当前也可以细化,gpio5-7 和gpio5-8这里只是拿来做CS,可以指定别的pin来做cs, 就可以继续用这路SPI。

4.5.2 驱动修改

修改phy的驱动

drivers/net/ethernet/freescale/fec_main.c

static int
fec_probe(struct platform_device *pdev)
{.../* add for alpha board LAN8720A start*/void __iomem *IMX6U_ENET1_TX_CLK;void __iomem *IMX6U_ENET2_TX_CLK;IMX6U_ENET1_TX_CLK = ioremap(0X020E00DC, 4);writel(0X14, IMX6U_ENET1_TX_CLK);IMX6U_ENET2_TX_CLK = ioremap(0X020E00FC, 4);writel(0X14, IMX6U_ENET2_TX_CLK);/* add for alpha board LAN8720A end*/fec_enet_get_queue_num(pdev, &num_tx_qs, &num_rx_qs);...

drivers/net/phy/smsc.c

#include <linux/of_gpio.h>
#include <linux/io.h>...static int smsc_phy_reset(struct phy_device *phydev)
{int err, phy_reset;int msec = 1;struct device_node *np;int timeout = 50000;int rc;if (phydev->mdio.addr == 0) {np = of_find_node_by_path("/soc/aips-bus@02100000/ethernet@02188000");} else if (phydev->mdio.addr == 1) {np = of_find_node_by_path("/soc/aips-bus@02000000/ethernet@020b4000");}if (!np) {return -1;}/* A sane reset duration should not be longer than 1s */err = of_property_read_u32(np, "phy-reset-duration", &msec);if (!err && msec > 1000)msec = 1;phy_reset = of_get_named_gpio(np, "phy-reset-gpios", 0);if (!gpio_is_valid(phy_reset))return -1;gpio_direction_output(phy_reset, 0);gpio_set_value(phy_reset, 0);msleep(msec);gpio_set_value(phy_reset, 1);... 

开启内核SMSC厂商驱动支持

Device Drivers > Network device support > PHY Device support and infrastructure >SMSC PHYs

在这里插入图片描述

对应的config: CONFIG_SMSC_PHY=y

编译内核和设备树,运行效果:

root@ATK-IMX6U:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 88:bc:2f:03:ec:0binet addr:192.168.3.37  Bcast:192.168.3.255  Mask:255.255.255.0inet6 addr: fe80::8abc:2fff:fe03:ec0b/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:33 errors:0 dropped:0 overruns:0 frame:0TX packets:49 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:3529 (3.4 KiB)  TX bytes:8573 (8.3 KiB)lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:14 errors:0 dropped:0 overruns:0 frame:0TX packets:14 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:860 (860.0 B)  TX bytes:860 (860.0 B)root@ATK-IMX6U:~# ping 192.168.3.32
PING 192.168.3.32 (192.168.3.32) 56(84) bytes of data.
64 bytes from 192.168.3.32: icmp_seq=1 ttl=64 time=3.57 ms
64 bytes from 192.168.3.32: icmp_seq=2 ttl=64 time=1.33 ms
64 bytes from 192.168.3.32: icmp_seq=3 ttl=64 time=1.33 ms
64 bytes from 192.168.3.32: icmp_seq=4 ttl=64 time=2.42 ms
^C
--- 192.168.3.32 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.332/2.166/3.576/0.928 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【3D 重建】NeRF,3D Gaussian Splatting

文章目录 AI 甘安捏【入门介绍&#xff0c;形象生动】3D 重建技術 (一): 什麼是 3D 重建 (3D Reconstruction)&#xff1f;為什麼需要 3D 重建&#xff1f;【NeRF&#xff0c;3D Gaussian Splatting简介】3D 重建技術 (二): NeRF&#xff0c;AI技術革命 -- 用神經網路把場景「背…

【维普网】收录的电子刊汇总(部分省市职称评审认可)

《中国科技期刊数据库&#xff08;文摘版&#xff09;医药卫生》是经国家新闻出版总署批准&#xff0c;科技部西南信息中心主管、重庆维普资讯有限公司主办的连续型电子出版物。国内刊号&#xff1a;50-9212/R&#xff0c;国际刊号&#xff1a; 1671-5608。主要栏目为影像与检验…

Cornerstone3D 演示库恢复更新啦~

前言 从0上手Cornerstone3D系列的git库终于有时间更新优化了一版。主要更新以下内容&#xff1a; ✨ vue2更新至vue3版本&#xff0c;代码迁移为vue3组合式写法 ✨ UI风格升级&#xff0c;新增交互提示 ✨ 修复页面切换报错问题 ✨ … 关于git库 &#x1f3af; 地址&…

el-upload照片墙自定义上传多张图片(手动一次性上传多张图片)包含图片回显,删除

需求&#xff1a;el-upload照片墙自定义上传多张图片&#xff08;手动一次性上传多张图片&#xff09;包含图片回显&#xff0c;删除&#xff0c;预览&#xff0c;在网上看了很多&#xff0c;都没有说怎么把数据转为file格式的&#xff0c;找了很久最终实现&#xff0c; 难点&a…

第4章 .NET 8.0 ASP.NET Core图书管理系统 :项目布局

第1章 框架学习的基石与实战策略 第2章 大话ASP.NET Core 入门 第3章 创建最小&#xff08;Minimal APIs&#xff09;API应用程序 第4章 .NET 8.0 ASP.NET Core图书管理系统 &#xff1a;项目布局 在第3章中&#xff0c;我们利用ASP.NET Core的“空”模板创建了BookQueryS…

lua 游戏架构 之 游戏 AI (五)ai_autofight_find_way

这段Lua脚本定义了一个名为 ai_autofight_find_way 的类&#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读238次。定义了一套接口和属性&#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如&…

【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误

【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&a…

20240724----idea的Java环境卸载与安装

1.删除旧有的jdk https://blog.csdn.net/weixin_42168713/article/details/112162099 &#xff08;补充&#xff1a;我把用户变量和java有关的都删了&#xff09; 2.下载新的jdk百度网盘链接 链接&#xff1a;https://pan.baidu.com/s/1gkuLoxBuRAtIB1IzUTmfyQ 提取码&#xf…

Docker 部署常用中间件(redis,rabbitMQ,mysql8,es,kibana,nginx等)亲测成功~~~

Docker 部署常用中间件 在日常开发中必要的环境&#xff0c;大多数都是单点后续持续更新集群模式~~~ docker 安装reids docker pull redis:7.2.5 编辑redis.conf # 绑定地址&#xff0c;默认只允许本机访问 # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 bind 0.0…

Vue中el的两种写法

大家好我是前端寄术区博主PleaSure乐事。今天了解到了Vue当中有关el的两种写法&#xff0c;记录下来与大家分享&#xff0c;希望对大家有所帮助。 方法一 解释 第一种方法我们直接用new创建并初始化一个新的 Vue 实例&#xff0c;并定义了 Vue 实例的数据对象&#xff0c;在给…

mac大文件清理软件哪个好 mac大文件怎么清理 苹果电脑清理软件推荐免费

mac采用固态硬盘技术&#xff0c;数据存储和系统响应速度优势明显&#xff0c;但是mac的内存弊端同样体现在其固态硬盘的技术&#xff0c;导致用户无法通过机械硬盘进行扩充内存。而我们日常使用电脑会产生大量系统垃圾、用户缓存等文件&#xff0c;平时下载的电影和大型游戏安…

前端:Vue学习 - 购物车项目

前端&#xff1a;Vue学习 - 购物车项目 1. json-server&#xff0c;生成后端接口2. 购物车项目 - 实现效果3. 参考代码 - Vuex 1. json-server&#xff0c;生成后端接口 全局安装json-server&#xff0c;json-server官网为&#xff1a;json-server npm install json-server -…

增材制造与智能制造关系

在撰写的增材制造技术与装备书籍中有着明确的描述&#xff0c;增材制造是智能制造的典型范例&#xff0c;是智能制造“类”的实例化过程。这种借助于计算机编程面向对象思想的解释可以更全面的理解增材制造和智能制造的关系。增材制造实例具备了智能制造类的属性&#xff0c;智…

钉钉 ai卡片 stream模式联调

sdk连接 新建卡片模板下载node.js sdkconfig.json 配置应用信息 启动项目npm i npm run build npm run start连接成功 获取卡片回调 注册卡片回调事件调用https://api.dingtalk.com/v1.0/card/instances 创建卡片实例&#xff0c;返回实例Id //参数结构 {"cardTempla…

Redis 7.x 系列【30】集群管理命令

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 集群信息2.1 CLUSTER INFO 3. 节点管理3.1 CLUSTER MYID3.2 CLUSTER NODES3…

LC617-合并二叉树

文章目录 1 题目描述2 思路优化代码完整输入输出 参考 1 题目描述 https://leetcode.cn/problems/merge-two-binary-trees/description/ 给你两棵二叉树&#xff1a; root1 和 root2 。 将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另…

数据结构排序合集(笔记)

目录 一.插入排序与希尔排序 二.选择排序与堆排序 三.冒泡排序和快速排序 四.归并排序 五.计数排序 一.插入排序与希尔排序 时间复杂度空间复杂度稳定性插入排序O&#xff08;N^2&#xff09;O(1)稳定希尔排序O(N^1.3)O(1)不稳定 插入排序&#xff1a; 希尔排序&#xff…

报红:找不到名称ref ts(2304)、‘ref‘ is not defined. eslint(no-undef)

接上篇 在上篇介绍了使用 unplugin-auto-import 和 unplugin-vue-components 配置完成后&#xff0c;项目可以正常运行&#xff0c;并且页面也正常显示&#xff0c;但vscode里就是报红 这个报红可能是由于 ts 发出的&#xff0c;也可能是由于 eslint 发出的 具体可以用鼠标…

打卡第22天------回溯算法

开始学习了,希望我可以尽快成功上岸! 一、回溯理论基础 什么是回溯法?回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率回溯法的本质是穷举,穷举所有可能,然后找出我们想要的答案。如果想让回溯法高效一些,可…

Docker-Compose实现MySQL之主从复制

1. 主服务器(IP:192.168.186.77) 1.1 docker-compose.yml services:mysql-master:image: mysql:latest # 使用最新版本的 MySQL 镜像container_name: mysql-master # 容器的名称environment:MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码MYSQL_DATABASE: masterd…