網站首頁 編程語言 正文
0x01 加載驅動模塊失敗
加載驅動失敗描述信息如下,錯誤信息提示板卡中運行的 linux 內核版本是 4.1.15-g49efdaa ,架構是 ARMv7 ;而編譯驅動使用的內核源碼版本為 4.1.15 ,架構是 ARMv6 。說明編譯驅動使用的內核版本名和架構與板卡中運行的均不一致。
root@ALIENTEK-IMX6U:~/get# insmod led.ko [ 1634.442887] led: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15-g49efdaa SMP preempt mod_unload modversions ARMv7 p2v8 ' insmod: ERROR: could not insert module led.ko: Invalid module format
0x02 解決方法
有兩種解決方法:
(1) 重新編譯內核、設備樹并燒錄到板卡中。
(2) 更改主機中的內核配置信息,使其與板卡中的一致。
重新燒錄內核比較麻煩,這里使用方法二。
1、在板卡終端中輸入命令uname -r
和uname -p
查看板卡所運行的內核的版本和架構信息。
root@ALIENTEK-IMX6U:~/get# uname -r 4.1.15-g49efdaa root@ALIENTEK-IMX6U:~/get# uname -p armv7l
說明板卡中運行的 linux 內核版本為4.1.15-g49efdaa
,處理器架構為ARMv7
2、進入主機中驅動模塊所使用的 linux 內核的根目錄,執行 make menuconfig
啟動 linux 內核圖形化配置界面(不能使用menuconfig的可以百度去安裝相應依賴庫)
如下圖所示,進入System Type
選項:
然后進入Multiple platform selection
選項:
然后在下圖的界面中取消第一條ARMv6 based platforms(ARM11)
前面的*
號(選中后按空格即可取消)
取消完畢后保存、退出,這樣就把內核支持的架構改為了 ARMv7 。
配置完 menuconfig 后不要再輸入其他的配置內核的命令,不然會沖刷掉之前的配置。
3、打開內核根目錄中的 Makefile ,在EXTRAVERSION
變量后添加你板卡中運行的linux內核版本號的后半部分,比如我的內核后半部分就是 -g49efdaa 。
更改完后保存,在 linux 內核根目錄下執行make -j12
重新編譯內核。
內核編譯完畢后重新編譯驅動模塊。
驅動模塊編譯完畢后用 NFS 下載到板卡中,輸入modinfo [驅動模塊名]
查看驅動模塊信息:
root@ALIENTEK-IMX6U:~/get# modinfo led.ko filename: /home/root/get/led.ko author: zuozhongkai license: GPL srcversion: 597E1DDC8A372707B8FD0DE depends: vermagic: 4.1.15-g49efdaa SMP preempt mod_unload modversions ARMv7 p2v8
可見vermagic
一行中顯示的驅動模塊所屬的內核版本和處理器架構與板卡中的內核信息一致,驅動模塊可以成功加載。
root@ALIENTEK-IMX6U:~/get# uname -r 4.1.15-g49efdaa root@ALIENTEK-IMX6U:~/get# uname -p armv7l
總結
原文鏈接:https://blog.csdn.net/qq_40807206/article/details/122183065
相關推薦
- 2023-03-01 React?useState的錯誤用法避坑詳解_React
- 2023-01-26 C#實現批量Word轉換Html的示例代碼_C#教程
- 2022-11-25 Linux?Shell腳本多命令執行邏輯的示例詳解_linux shell
- 2023-01-13 pytorch如何定義新的自動求導函數_python
- 2023-01-28 Pytorch中torch.cat()函數舉例解析_python
- 2022-06-24 基于C++實現去除字符串頭尾指定字符功能_C 語言
- 2022-07-26 Spring底層核心原理解析
- 2022-08-12 關于VSCode?配置使用?PyLint?語法檢查器的問題_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支