成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux kernel 在 Git 目錄和 SVN 目錄編譯行為不一致的解決方法

系統(tǒng) Linux 系統(tǒng)運(yùn)維
Linux kernel在 SVN 的版本控制下編譯得好好的,但是換成 Git 做版本控制之后,即便是完全一模一樣的兩套目錄樹(shù),編譯出來(lái)就是不一樣!難道Linux 編譯結(jié)果還跟版本控制環(huán)境有關(guān)?查了資料,還真是有關(guān)……

[[174200]]

近期把開(kāi)發(fā)從 SVN 遷移到了 Git 上。其實(shí)一早就遇到一個(gè)問(wèn)題,那就是 Linux kernel,在 SVN 的版本控制下編譯得好好的,但是換成 Git 做版本控制之后,即便是完全一模一樣的兩套目錄樹(shù),編譯出來(lái)就是不一樣!

我暈,Linux 編譯結(jié)果還跟版本控制環(huán)境有關(guān)?查了資料,還真是有關(guān)……

Reference

Linux內(nèi)核模塊加載時(shí)的版本檢查

修改utsrelease.h 文件里面的版本號(hào)后

向linux內(nèi)核版本號(hào)添加字符/為何有時(shí)會(huì)自動(dòng)添加“+”號(hào)

關(guān)于CONFIG_LOCALVERSION_AUTO設(shè)置去掉內(nèi)核版本號(hào)SVN后綴

去掉SVN管理kernel編譯后版本自動(dòng)變化

非開(kāi)源的驅(qū)動(dòng)程序如何繞過(guò)version magic的檢查

繞過(guò)linux Driver Vermagic檢查

 

主要知識(shí)點(diǎn)歸納

內(nèi)核基礎(chǔ)版本號(hào)

Linux 內(nèi)核在編譯時(shí),在根目錄的 Makefile 最開(kāi)頭有幾個(gè)宏,決定了編譯出來(lái)的 Linux 基本版本號(hào)。我用的內(nèi)核版本比較老,是這樣的:

  1. VERSION = 2 
  2. PATCHLEVEL = 6 
  3. SUBLEVEL = 36 
  4. EXTRAVERSION = 
  5. ... 

而內(nèi)核代碼在獲得這個(gè)基本版本號(hào),則需要包含include/linux/version.h文件:

  1. #define LINUX_VERSION_CODE 132644 
  2. #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) 

其中LINUX_VERSION_CODE就是(2 << 16) + (6 << 8) + (36 << 0)

這個(gè)宏很重要,舉個(gè)例子:不同的 Linux 內(nèi)核的 ioctl 函數(shù)原型是不同的,但是你的驅(qū)動(dòng)又不想寫(xiě)兩套,這個(gè)時(shí)候就應(yīng)該這么寫(xiě):

  1. #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35)) 
  2. static long my_ioctl (struct file *file,  
  3.                       unsigned int req,  
  4.                       unsigned long arg) 
  5. #else 
  6. static int my_ioctl (struct inode *inode,  
  7.                      struct file *file,  
  8.                      unsigned int req,  
  9.                      unsigned long arg) 
  10. #endif 
  11.     // brah brah brah ... 

內(nèi)核擴(kuò)展版本號(hào)

這里請(qǐng)注意內(nèi)核的include/vermagic.h文件,有一個(gè)VERMAGIC_STRING宏,定義如下:

  1. ... 
  2. #define VERMAGIC_STRING                         \ 
  3.     UTS_RELEASE " "                            \ 
  4.     MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT             \ 
  5.     MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS    \ 
  6.     MODULE_ARCH_VERMAGIC 

其中UTS_RELEASE宏來(lái)自于include/generated/utsrelease.h文件。

首先,這個(gè)文件是自動(dòng)創(chuàng)建的,你修改了也沒(méi)用。

其次,這個(gè)版本號(hào)的來(lái)源很復(fù)雜,除了 Linux 基礎(chǔ)版本號(hào)(也就是 Makefile 的前三個(gè)變量)之外,還依賴很多變量:

  1. Makefile 里面的EXTRAVERSION宏,這是緊跟在基礎(chǔ)版本號(hào)后面的
  2. make menuconfig 時(shí)指定的CONFIG_LOCALVERSION_AUTO配置宏,決定了到scripts/setlocalversion里面去添加什么樣的附加內(nèi)容
  3. LOCALVERSION,貌似一般情況下這個(gè)宏是沒(méi)有定義的

而這個(gè)VERMAGIC_STRING有什么用呢?這經(jīng)常是用在一些自定義的內(nèi)核模塊里面。如果內(nèi)核模塊的實(shí)現(xiàn)依賴于具體 Linux 內(nèi)核發(fā)行版的話,在 insmod 的時(shí)候就需要判斷內(nèi)核的 VERMAGIC_STRING。很多情況下,這里面會(huì)包含很多信息。

比如我遇到問(wèn)題的內(nèi)核模塊,其完整的VERMAGIC_STRING就是:“2.6.36+ mod_unload MIPS32_R2 32BIT”

 

Version magic 不匹配問(wèn)題的解決

我遇到的錯(cuò)誤是這樣的,內(nèi)核執(zhí)行時(shí),網(wǎng)卡無(wú)法加載,以致設(shè)備沒(méi)有網(wǎng)絡(luò)。可以看到串口有這么一句錯(cuò)誤信息:

  1. my_net_adapt: version magic '2.6.36+ mod_unload MIPS32_R2 32BIT ' should be '2.6.36 mod_unload MIPS32_R2 32BIT ' 

根本的解決辦法,是消除掉前面的 magic 里的加號(hào),讓兩個(gè) version magic 變成一模一樣的。但是我找了資料也沒(méi)找到為啥。這里要求各路大神了。將就的解決辦法,就是讓兩個(gè) version magic 都加上加號(hào),這樣 magic 檢查就可以通過(guò)啦。

查看我的 utsrelease.h 文件,可以看到其內(nèi)容是 “2.6.36”。那么解決方案就有兩種:

在目錄的 Makefile,改第四個(gè)變量為 “EXTRAVERSION = +”。

在 Linux 的根目錄下,創(chuàng)建一個(gè)沒(méi)有用的 “.git” 空文件夾,讓 setlocalversion 以為這是一個(gè) Git 項(xiàng)目,從而自動(dòng)加上加號(hào)。

第二個(gè)方案是基于一個(gè)前提的:Linux 根目錄不是我整個(gè)工程的根目錄,因而整個(gè)工程的 .git 文件夾在別處。

于是,問(wèn)題解決了。我們測(cè)試也確認(rèn)這臺(tái)內(nèi)核編譯出來(lái)是 OK 的。但說(shuō)實(shí)話,具體原因是什么,還要研究研究——為什么在 SVN 下面就沒(méi)問(wèn)題,在 Git 就有問(wèn)題呢?

責(zé)任編輯:武曉燕 來(lái)源: segmentfault
相關(guān)推薦

2021-04-18 15:01:56

緩存系統(tǒng)數(shù)據(jù)

2017-06-20 09:42:52

網(wǎng)絡(luò)安全法數(shù)據(jù)隱私法網(wǎng)絡(luò)安全

2024-05-11 07:37:43

數(shù)據(jù)Redis策略

2025-04-03 09:51:37

2012-09-24 09:27:52

SVN

2024-11-18 08:00:00

數(shù)據(jù)倉(cāng)庫(kù)通用語(yǔ)義層商業(yè)智能

2017-08-25 17:59:41

浮點(diǎn)運(yùn)算C語(yǔ)言

2013-03-29 11:16:17

2010-06-02 10:53:28

MySQL版本

2022-03-18 10:53:49

數(shù)據(jù)系統(tǒng)架構(gòu)

2012-01-11 16:22:35

HTML 5

2018-07-15 08:18:44

緩存數(shù)據(jù)庫(kù)數(shù)據(jù)

2011-02-22 14:02:48

vsftpd

2023-12-22 10:19:19

數(shù)據(jù)庫(kù)鎖機(jī)制

2013-12-13 14:46:55

OSPFMTU鄰接關(guān)系

2021-05-27 18:06:30

MySQL編碼數(shù)據(jù)

2024-04-07 09:00:00

MySQL

2018-07-08 07:38:28

數(shù)據(jù)庫(kù)緩存數(shù)據(jù)

2020-07-20 14:06:38

數(shù)據(jù)庫(kù)主從同步服務(wù)

2022-03-16 15:54:52

MySQL數(shù)據(jù)format
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕一级毛片视频 | 国产精品久久久久久久免费观看 | 日韩免费一区二区 | 欧美成人免费在线 | 偷拍自拍在线观看 | 亚洲精品一区二区另类图片 | 在线日韩中文字幕 | 91免费在线视频 | www.久久久久久久久 | 精品一二区 | 欧美五月婷婷 | 欧美日韩一区在线播放 | 一区二区精品在线 | 免费h在线 | 九九在线精品视频 | 久久久久久久久久久久91 | 亚洲午夜精品一区二区三区他趣 | 国产一区二区美女 | 亚洲欧美综合 | 日本久久久影视 | 日本综合在线观看 | 美女黄频 | 久久久久久久久蜜桃 | 欧美一区二区三区精品 | 国产免费av在线 | 国产视频二区 | 黄色一级大片在线免费看产 | 精品三区 | 国产精品久久久一区二区三区 | 91在线看 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 欧美日韩一卡二卡 | 亚洲欧洲中文 | 麻豆av网站| 在线黄色影院 | 亚洲视频中文 | 国产一区二区三区视频 | 国产精品久久久 | 一级黄色av电影 | 夜夜摸夜夜操 | 伊人网综合在线观看 |