飞腾机器,主板集成的网卡、声卡等需要额外内核驱动,该驱动目前没有进入上游主线内核。 目前有一份飞腾技术支持提供的基于 4.19 内核补丁文件,飞腾内部版本号为 4.19.9, 想把它移植到 Debian 11 稳定版内核 5.10.140 内核上来。
git clone https://gitee.com/atzlinux/atzlinux-kernel.git
https://gitee.com/atzlinux/atzlinux-kernel/blob/master/debian/patch/phytium-official/
文件名: patch-phytium-4.19.9
该文件比较大,在移植时,需要根据驱动模块目录,剥离成小的补丁文件。
该目录下其它文件,是飞腾历史补丁文件和移植到其它版本内核的补丁文件。
apt install linux-headers-arm64
请将 * 号使用 Debian 11 最新的 5.10.x 内核版本号代替。
安装完成后,会在 /usr/src 下生成头文件目录:
/usr/src/linux-headers-*-common
/usr/src/linux-headers-*-arm64
建议使用国内内核 git 镜像
https://mirrors.bfsu.edu.cn/git/linux-stable.git
可以在本机 clone 该内核仓库,方便排查内核函数变化。
从 4.19 飞腾内核原始补丁文件剥离出来的单个驱动模块补丁文件,和针对 5.10.x 修改后的补丁文件,放到 debian/patch 目录。
在仓库根目录下,按 linux 内核文件目录层级建立相应目录。
拷贝 5.10 内核源代码相应模块目录,再根据飞腾 4.19 内核补丁文件,进行源代码修改。
该目录下源代码,可以编译通过后,再用 git diff 形成针对 5.10 内核补丁文件, 放入 debian/patch 目录。
该目录下驱动,可以使用
make -C /usr/src/linux-headers-5.10.0-x-arm64/ M=$PWD modules
编译模块 .ko 文件。
make -C /usr/src/linux-headers-5.10.0-x-arm64/ M=$PWD clean
1.提取飞腾旧内核补丁
按功能模块分开放到 debian/patch 目录下。 该补丁文件以 4.19.9-path-filename.patch 形式命名
2.生成新内核补丁
将补丁文件迁移到 5.10.x 内核上,能够成功编译,新的补丁文件,以 5.10.x-path-filename.patch 形式命名 , 放入 debian/patch 目录。
该新内核补丁文件初始版本,可以直接由旧内核补丁直接拷贝,然后逐步修改为能够正常 patch 新内核的补丁文件,持续提交更新。
3.创建生成可编译目录
在仓库根目录下,按目录路径创建相应模块目录,放置在 5.10.x 上可以编译的驱动文件。 需要有 Makefile 和 Kconfig 文件,能够直接编译成 .ko 模块文件。
相关驱动模块,希望能够用 module 方式加载到内核。 能够正确识别硬件,功能正常。
可以使用 rmmod 卸载驱动模块,dmesg 信息正常。
迁移成功的模块,
相关内核模块二进制包、udeb 安装包、dkms 包,可以通过 arm64 架构的铜豌豆软件源下载安装:
https://www.atzlinux.com/allpackages-arm64.htm
补丁文件,请使用 diff -ru 生成
如果有对内核头文件的修改,请尽量将改动放在驱动模块的代码上,不修改内核头文件
这样生成的内核模块驱动,可以不依赖内核符号,方便灵活。
https://www.atzlinux.com/download-iso.htm#arm64
https://docs.kernel.org/kbuild/modules.html
欢迎大家补充! 相关问题,欢迎创建 issue!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。