有没有人成功在华为海思平台上编译过内核模块

2021-12-12 10:29:21 +08:00
 v2000000001ex

1.平台基本信息

#内核, 4.4.197
Linux hs8145x6 4.4.197 #1 SMP Mon Jul 13 10:01:41 UTC 2020 armv7l GNU/Linux

#cpu, armv7
processor       : 0
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 1594.16
Features        : half thumb fastmult edsp thumbee tls

#硬件, hisi A9
Hardware        : Hisilicon A9
Revision        : 0000
Serial          : 0000000000000000

2.根据 linux 官网提供的 4.4.197 内核,编译一个最简单的内核模块,提示以下错误

[  196.377553] ------------[ cut here ]------------
[  196.377602] WARNING: CPU: 1 PID: 3665 at kernel/module.c:1105 module_put+0x78/0x13c()
[  196.377615] Modules linked in: getshell bridge ...
[  196.378513] CPU: 1 PID: 3665 Comm: insmod Tainted: P        W  O    4.4.197 #1
[  196.378527] Hardware name: Hisilicon A9
[  196.378575] [<c0012d3c>] (rtos_unwind_backtrace) from [<c000e518>] (show_stack+0x10/0x14)
[  196.378611] [<c000e518>] (show_stack) from [<c023cd20>] (dump_stack+0x88/0xa8)
[  196.378651] [<c023cd20>] (dump_stack) from [<c001fa6c>] (warn_slowpath_common+0x84/0xb0)
[  196.378678] [<c001fa6c>] (warn_slowpath_common) from [<c001fb80>] (warn_slowpath_null+0x18/0x20)
[  196.378703] [<c001fb80>] (warn_slowpath_null) from [<c0094140>] (module_put+0x78/0x13c)
[  196.378730] [<c0094140>] (module_put) from [<c00d5ae4>] (do_init_module+0xd0/0x1e4)
[  196.378752] [<c00d5ae4>] (do_init_module) from [<c0097648>] (load_module+0x1bc8/0x1c78)
[  196.378773] [<c0097648>] (load_module) from [<c00978f0>] (SyS_finit_module+0x70/0x94)
[  196.378794] [<c00978f0>] (SyS_finit_module) from [<c000abc0>] (ret_fast_syscall+0x0/0x40)
[  196.378811] ---[ end trace d531998291dcf678 ]---

因为机器是双核的,机器内核默认是开启了 PLT section(s), 随便找一个自带的内核模块,用 objdump dump 下 symbol 。可以验证是开启了 PLT 。

[root@hs8145x6 ~]# objdump  -t  hi_gmac.ko   | grep plt
00000000 l    d  .plt   00000000 .plt
00000001 l    d  .init.plt      00000000 .init.plt

但是用 linux 官方的内核,且开启了 PLT section(s)情况下编译的模块,无法正常运行。感觉海思好像改了 PLT , 但目前不知道改在哪里, 所以,烦请 有能力的大佬帮忙分析分析下。谢谢。

3467 次点击
所在节点    程序员
18 条回复
duforv2
2021-12-12 13:02:26 +08:00
在 v2 问某为,是在捅马蜂窝啊
yangxin0
2021-12-12 13:11:50 +08:00
没得华为内部支持估计你用起来都很难
jackmod
2021-12-12 13:28:13 +08:00
似乎没太大关系?好久没碰嵌入式,轻拍。
mod 需要的 kernel 名称( uname -a )需要和当前 kernel 名称完全匹配,一个字都不能差。
现在用的什么内核就要拿它的源码(或头文件)去 build 才可以。
gengchun
2021-12-12 13:39:47 +08:00
B 站上好像有用 Gentoo 的,做过海思的,你要不搜搜看,直接去问 UP 主。
feather12315
2021-12-12 13:49:35 +08:00
用 openeuler 的内核,4.19 或 5.10 试试。
openeuler 内核是华为所有使用 Linux 产品线内核的源头。
whenov
2021-12-12 14:01:43 +08:00
内核模块的版本要和内核版本对应上才行。不如先说下你的目的?
whenov
2021-12-12 14:02:40 +08:00
打补丁的话直接用 patch 或者 git apply 都可以吧,要看你本来的流程是怎样的
SpicaStar
2021-12-12 14:53:52 +08:00
好奇折腾光猫是有啥特殊需求吗
ysc3839
2021-12-12 15:16:42 +08:00
怀疑是 X-Y Problem https://coolshell.cn/articles/10804.html
建议直接说具体需求
v2000000001ex
2021-12-12 18:34:59 +08:00
@jackmod 对,内核 ver magic 已经匹配过了,否则根本不会执行 ko ,直接提示 ver magic 错误,在我给的最简单的内核模块的链接的资源里有 config ,里面我都适配好了。
v2000000001ex
2021-12-12 18:38:58 +08:00
@whenov
@SpicaStar
@ysc3839
为了通过内核模块实现光猫自启动 shell 脚本。因为光猫根分区是只读的,且无法实现启动执行自定义脚本。
whenov
2021-12-12 19:13:06 +08:00
为什么不直接用 4.9.30 的内核源码呢?
whenov
2021-12-12 19:14:18 +08:00
才注意到新光猫的内核是 4.4.197
v2000000001ex
2021-12-12 19:21:12 +08:00
@whenov #13 对,如果用 4.9.30 ,在修改 config 中的版本,适配 ver magic ,编译出来的 ko ,虽然执行不报 vermagic 错误,但会出现内核 panic 。
flynaj
2021-12-12 20:46:03 +08:00
华为的硬件都很封闭,openwrt 适配不了。建议不要浪费时间。
v2000000001ex
2021-12-12 21:28:55 +08:00
@flynaj 对,现在问题主要集中在 PLTs ,与硬件驱动无关。
v2000000001ex
2021-12-12 21:33:52 +08:00
@feather12315 #5 看了下 openeuler 的 4.4.197 内核,PLTs 与官方源码 一致
yolee599
2021-12-13 08:33:06 +08:00
这个还是要找 FAE 吧,硬件太封闭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/821614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX