導航:首頁 > 源碼編譯 > 內核編譯驅動沒更新

內核編譯驅動沒更新

發布時間:2022-10-04 04:50:54

linux內核編譯加入驅動

1、內核編譯前期make menu時有固定的硬體支持列表,你選定就行了
2、如果你的網卡驅動支持加到內核源碼,你就能在make menu是選定你的網卡驅動
3、讀一下網卡驅動源碼的INSTALL或README文檔,肯定有安裝步驟
4、一般網卡驅動編譯後,可以用insmod安裝使用

⑵ linux 編譯內核幾個常見問題解決方法

第一次把自己編譯的驅動模塊載入進開發板,就出現問題,還好沒花費多長時間,下面列舉出現的問題及解決方案
1:出現insmod: error inserting 'hello.ko': -1 Invalid mole format
法一(網上的):是因為內核模塊生成的環境與運行的環境不一致,用linux-2.6.27內核源代碼生成的模塊,可能就不能在linux-2.6.32.2內核的linux環境下載入,需要在linux-2.6.27內核的linux環境下載入。
a.執行 uname -r //查看內核版本
b.一般出錯信息被記錄在文件/var/log/messages中,執行下面命令看錯誤信息
# cat /var/log/messages |tail
若出現類似下面:
Jun 4 22:07:54 localhost kernel:hello: version magic '2.6.35.6-45.fc14.i686.PAE
' should be '2.6.35.13-92.fc14.i686.PAE'
則把 Makefile里的KDIR :=/lib/moles/2.6.35.6-45.fc14.i686.PAE/build1 改為
KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1 //改成自己內核源碼路徑
(這里的build1是一個文件鏈接,鏈接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)
然並卵,我的fedora 14 /usr/src/kernels下並沒有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,雖然不知道兩者有什麼區別,但改成2.6.35.13-92.fc14.i686還是不行,照樣這個問題,還好後來在看教學視頻的到啟發
法二:改的還是那個位置
KDIR :=/opt/FriendlyARM/linux-2.6.32.2 //把這里改成你編譯生成kernel的那個路徑
all:
$ (MAKE) -C $ (KDIR) M = $ (PWD) moles ARCH=arm CROSS_COMPILE=arm-linux- //加這句
2. [70685.298483] hello: mole license 'unspecified' taints kernel.
[70685.298673] Disabling lock debugging e to kernel taint
方法:在模塊程序中加入: MODULE_LICENSE("GPL");
3. rmmod: chdir(2.6.32.2-FriendlyARM): No such file or directory 錯誤解決
方法:lsmod 可查看模塊信息
即無法刪除對應的模塊。
就是必須在/lib/moles下建立錯誤提示的對應的目錄((2.6.32.2)即可。
必須創建/lib/moles/2.6.32.2這樣一個空目錄,否則不能卸載ko模塊.
# rmmod nls_cp936
rmmod: chdir(/lib/moles): No such file or directory
但是這樣倒是可以卸載nls_cp936,不過會一直有這樣一個提示:
rmmod: mole 'nls_cp936' not found
初步發現,原來這是編譯kernel時使用make moles_install生成的一個目錄,
但是經測試得知,rmmod: mole 'nls_cp936' not found來自於busybox,並不是來自kernel
1).創建/lib/moles/2.6.32.2空目錄
2).使用如下源碼生成rmmod命令,就可以沒有任何提示的卸載ko模塊了[luther.gliethttp]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
const char *modname = argv[1];
int ret = -1;
int maxtry = 10;
while (maxtry-- > 0) {
ret = delete_mole(modname, O_NONBLOCK | O_EXCL);//系統調用sys_delete_mole
if (ret < 0 && errno == EAGAIN)
usleep(500000);
else
break;
}
if (ret != 0)
printf("Unable to unload driver mole \"%s\": %s\n",
modname, strerror(errno));
}
3).把生成的命令復制到文件系統
# arm-linux-gcc -static -o rmmod rmmod.c
# arm-linux-strip -s rmmod
# cp rmmod /nfs/
cp /nfs/rmmod /sbin
代碼如下:
proc.c
[html] view plain
<span style="font-size:18px;">#include <linux/mole.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h> /* Necessary because we use the proc fs */
#define procfs_name "proctest"

MODULE_LICENSE("GPL");
struct proc_dir_entry *Our_Proc_File;
int procfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data)
{ int ret;
ret = sprintf(buffer, "HelloWorld!\n");
return ret;
}

int proc_init()
{ Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
if (Our_Proc_File == NULL) {
remove_proc_entry(procfs_name, NULL);
printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",procfs_name);
return -ENOMEM; }
Our_Proc_File->read_proc = procfile_read;//
// Our_Proc_File->owner = THIS_MODULE;
Our_Proc_File->mode = S_IFREG | S_IRUGO;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 37;
printk("/proc/%s created\n", procfs_name);
return 0;
}
void proc_exit()
{ remove_proc_entry(procfs_name, NULL);
printk(KERN_INFO "/proc/%s removed\n", procfs_name);
}
mole_init(proc_init);
mole_exit(proc_exit);</span></span></span></span></span>
[html] view plain
<span style="font-size:18px;">

ifneq ($(KERNELRELEASE),)
obj-m :=proc.o
else
KDIR :=/opt/FriendlyARM/linux-2.6.32.2
#KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) moles ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif</span></span></span></span></span>
make後生成proc.ko,再在開發板上insmod proc.ko即可
執行 dmesg 就可以看到 產生的內核信息啦

⑶ 為什麼linux更新內核 顯卡驅動失效

內核沒有識別這個顯卡的能力,所以需要安裝這個顯卡配套的驅動

⑷ linux內核編譯問題

根據你的警告是提示,找不到這些驅動模塊,應該是沒有編譯驅動模塊或者沒有安裝驅動模塊造成的。
1、要確保你的內核包是完整的,而且是centos配套版本(因為各大發行版都會針對自己的情況對內核進行配置和改動,直接用kernel.org的原版內核可能會有些故障)
2、編譯前要 先make clean一下,把以前編譯剩下的東西清掉,重頭再來。

3、編譯時順序執行如下命令
make bzImage 生成內核映像
make moles 生成驅動模塊
make moles_install 安裝驅動模塊
make install 安裝內核

⑸ 為什麼要配置內核為何要重新編譯內核

為什麼要配置內核?
編譯前當然要配置一下內核啊,make menuconfig ,生成默認配置文件 .config ,這個文件是設置 cpu 體系,及很多驅動選項的,你沒配置這個,怎麼可能編譯那
新下載的內核都是沒有默認 .config 需要你找到一個默認的config 文件,比如 arch/arm/configs/ 下是 arm cpu 很多的默認配置,當然你也可以把你以前的 config 文件拷貝到新內核目錄下。
.config 是配置編譯內核的最初步驟,你要編譯驅動程序,就必須要了解這個,多上網查下資料
然後重新編譯

為何要重新編譯內核?
Linux作為一個自由軟體,在廣大愛好者的支持下,內核版本不斷更新。

新的內核修訂了舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統度身定製一個更高效,更穩定的內核,就需要重新編譯Linux內核。
通常,更新的內核會支持更多的硬體,具備更好的進程管理能力,運行速度更快、 更穩定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是Linux使用者的必要操作內容。
為了正確的合理地設置內核編譯配置選項,從而只編譯系統需要的功能的代碼,一般主要有下面四個考慮:
(1)自己定製編譯的內核運行更快(具有更少的代碼)
(2)系統將擁有更多的內存(內核部分將不會被交換到虛擬內存中)
(3)不需要的功能編譯進入內核可能會增加被系統攻擊者利用的漏洞
(4) 將某種功能編譯為模塊方式會比編譯到內核內的方式速度要慢一些

這樣就了解為什麼要編譯Linux內核了。

⑹ linux裡面編譯安裝顯卡驅動失敗求高手幫助

源碼包的位置不正確,你可以在./config 的時候指定內核源碼包位置。一般linux將內核源碼裝在了/usr/src/linux下,如果你所用的內核版本與源碼包的版本不一致,則你要更新源碼包,並重新生成生成version.h文件:

makeinclude/linux/version.h
makeinclude/asm
ls-l/lib/moles/3.x.x.x

其中3.x.x.x是你的源碼包內核版本號。


然後,你再編譯一次驅動,應該就能編譯成功了。

⑺ 為什麼內核配置成功,驅動編譯不成功

因為驅動可能是為特定的內核編寫的。可能需要稍加改動

⑻ linux內核剪裁後,之前的驅動程序還在嗎此時是否需要重新編譯各種驅動程序

驅動有很多種,有些是強制必須編譯在內核里的,有些是可選編譯在內核里的,有些不是內核自帶的,第一種內核沒剪裁掉那些驅動就在內核里了,第二種如果你內核剪裁了(或者選擇成編譯成動態載入)就沒有,要另外編譯一下,如果沒剪裁(直接編譯進內核)不存在重新編譯,最後一種,也不用重編譯,除非內版本號與原驅動編譯時用的版本號不兼容了

⑼ 編譯內核後kernel panic,應該是sata驅動沒有載入上,如何給kernel加驅動

.... 你太牛x了

第一 內核和 initrd文件是統一的 ,也就是說 你編譯了一個內核 如果使用initrd的話 必須是你編譯的內核生成的initrd ,不過這個不是必須存在的, 不過你這里必須吧 Initrd /initrd-2.4.20-8.img 這一行刪除

第二, hdc=ide-scsi 這個你為什麼要載入? 讓系統自動處理最好, 此外 vmware下面 如果使用scsi硬碟, 那麼默認的磁碟應該是 sda , 光碟機一般是 hdc

還有, 內核裡面的選項有3個 , Y的意思是編譯進內核 也就是你這里的bzImage-2.4.18test1 文件, N是不編譯, M是編譯為模塊,如果你的 SCSI驅動編譯為模塊的話 那才需要 initrd ,否則就不需要

另外 ,我想你似乎搞錯了 scsi low-level drivers 這個不是很重要好像 都編譯為模塊即可 重要的是上面的幾個scsi支持 ,這里不方便贅述,給你找個參考資料 , 你那本書太老了實在

這里有個很好的內核選項介紹

事實上, 不需要在內核編譯上耗費太多的時間,選項沒必要太精細面面俱到,基本上 ,基礎的東西和文件系統驅動都編譯進內核,其他的都編譯為模塊即可,系統會自動載入需要的 , 除非你要做深入的內核驅動程序分析 ..

⑽ linux 內核驅動問題

1,重新編譯內核浪費時間,可以考慮把fedora的it20驅動移植過來!參考網上的makefile寫個,自己編譯一下。把編譯得到的ko放到某目錄下, 在啟動腳本里載入它!

2, 如果想重新編譯內核也可以,把fedora9的it驅動替換你的驅動(把源文件名字改成一樣的),前提是你有內核源代碼!一般安裝完fedora後,在源碼里有個.config文件,這就是默認的配置文件,你也不許要再make menuconfig了,直接make oldconfig make 就行。

閱讀全文

與內核編譯驅動沒更新相關的資料

熱點內容
pdf綠盟 瀏覽:500
固態硬碟編譯器重建 瀏覽:387
怎樣編輯硬碟文件夾 瀏覽:654
安卓系統如何打開電腦軟體 瀏覽:568
android監聽事件處理 瀏覽:745
h3c伺服器怎麼看功率 瀏覽:119
前端錄制文件如何上傳伺服器 瀏覽:538
雅黑pdf 瀏覽:460
python使用領域 瀏覽:882
買蘭博基尼用什麼app 瀏覽:139
android關閉後台運行 瀏覽:507
python輸出路徑為超鏈接 瀏覽:535
caxa為什麼沒有加密鎖 瀏覽:794
伺服器怎麼設置才能用IP訪問 瀏覽:665
郵件附件加密後打開能顯示嗎 瀏覽:726
榮耀x10拍照演算法 瀏覽:571
androidgradle配置簽名 瀏覽:98
文件夾左邊的空心三角符號是什麼 瀏覽:290
app英語音頻試卷掃碼怎麼聽 瀏覽:615
字元串編譯預處理 瀏覽:706