欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
內核與驅動(dòng)文件的version magic匹配問(wèn)題
最近做一個(gè)底層源碼版本管理的工作:本地調試OK的內核源碼,驅動(dòng)源碼,文件系統等,作為一個(gè)工程上傳至SVN服務(wù)器,以便同事們可以方便共享同步代碼;

1.問(wèn)題:本地編譯的一整套底層代碼down到設備跑都正常,但是由這套代碼上傳SVN服務(wù)器而后checkout出來(lái)的代碼編譯的文件,則出現驅動(dòng)文件加載不上的情況(驅動(dòng)以模塊方式加載),打印如下
log: version magic '3.3.0 preempt mod_unload ARMv5 ' should be '3.3.0-svn87 preempt mod_unload ARMv5 '

2.分析:初步由打印log信息看,是由version magic不匹配造成,找到信息打印點(diǎn),kernel/module.c

點(diǎn)擊(此處)折疊或打開(kāi)

  1. printk(KERN_ERR"%s: version magic '%s' should be '%s'\n",
  2.          mod->name, modmagic, vermagic);
然后

點(diǎn)擊(此處)折疊或打開(kāi)

  1. static const char vermagic[]= VERMAGIC_STRING;
可知打印語(yǔ)句實(shí)際由宏VERMAGIC_STRING定義,接著(zhù)看include/linux/vermagic.h

點(diǎn)擊(此處)折疊或打開(kāi)

  1. #define VERMAGIC_STRING                         \
  2.     UTS_RELEASE " "                            \
  3.     MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT             \
  4.     MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS    \
  5.     MODULE_ARCH_VERMAGIC
打印信息的不同點(diǎn)“'3.3.0”和“3.3.0-svn87”是由宏UTS_RELEASE生成,那么重點(diǎn)關(guān)注UTS_RELEASE
由名字推測是編譯內核時(shí)版本號給打上了svn相關(guān)標記,但是在內核源碼中沒(méi)看到任何地方定義UTS_RELEASE,再到Makefile找,搜到這句

點(diǎn)擊(此處)折疊或打開(kāi)

  1. (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\";)
再搜KERNELRELEASE

點(diǎn)擊(此處)折疊或打開(kāi)

  1. # Read KERNELRELEASE from include/config/kernel.release(if it exists)
  2.  382 KERNELRELEASE = $(shell cat include/config/kernel.release 2>/dev/null)
  3.  383 KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
可見(jiàn)KERNELRELEASE由include/config/kernel.release文件讀取獲得,但是內核源碼中并無(wú)此文件(為查找差異之前將內核make distclean掉了),再重新編譯

一次,果然生成了
include/config/kernel.release文件,查看內容

點(diǎn)擊(此處)折疊或打開(kāi)

  1. cat include/config/kernel.release
  2. 3.3.0-svn87
找到了加載驅動(dòng)時(shí)打印log里的“3.3.0-svn87

再回到Makefile,搜kernel.release

點(diǎn)擊(此處)折疊或打開(kāi)

  1. # Store (new) KERNELRELASEstring in include/config/kernel.release
  2.  951 include/config/kernel.release: include/config/auto.conf FORCE
  3.  952 $(Q)rm-f $@
  4.  953 $(Q)echo"$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"> $@
kernel.release就是在這里生成的,前面版面號忽略,“-svn87”實(shí)際上是執行setlocalversion得到svn版本號加上去的;

查看得知
setlocalversion是一個(gè)腳本文件,支持自動(dòng)獲取svn,git等源碼管理工具的版本號;


3.解決:


只需要使version magic一致,驅動(dòng)就可以順利加載;由于廠(chǎng)商提供的部分驅動(dòng)文件沒(méi)提供源碼,并且本地內核也會(huì )不斷升級(svn版本號會(huì )變),所以最簡(jiǎn)單的方法是將

附加的-svnXX去掉,這樣現存的驅動(dòng)和后續編譯的驅動(dòng)和內核就都可以保持一致了:


修改如下,

點(diǎn)擊(此處)折疊或打開(kāi)

  1. include/config/kernel.release: include/config/auto.conf FORCE
  2.  952 $(Q)rm-f $@
  3.  953 #     $(Q)echo"$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"> $@
  4.  954       $(Q)echo"$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree))"> $@
重新編譯后,驅動(dòng)可以正常加載工作了。

PS:當然,version magic是一個(gè)很好的功能,如果所有驅動(dòng)都有源碼,對于發(fā)布產(chǎn)品的版本,加上svn版本號標記可以有效保證內核驅動(dòng)版本一致性。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
非開(kāi)源的驅動(dòng)程序如何繞過(guò)version magic的檢查
解析 Linux 內核可裝載模塊的版本檢查機制
openwrt的一些瑣事
向linux內核版本號添加字符/為何有時(shí)會(huì )自動(dòng)添加“ ”號
pcDuino內核開(kāi)發(fā)指南
加載insmod “Invalid module format ”問(wèn)題解決
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久