Linux驱动开发环境配置(内核源码树构造)
來源:季義欽BLOG 作者:季義欽
?
初次接觸Linux驅動程序開發,買了一本《Linux設備驅動程序》,第一件事當然就是構建開發環境了!!!
它上面有一個Hello World的列子:
//hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void){
printk(KERN_ALERT "Hello, world/n");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT"Goodbye, cruel world/n");
}
module_init(hello_init);
module_exit(hello_exit);
下面我們來看怎么讓它跑起來:
驅動程序和用戶程序可不一樣,它是作為一個模塊連接到內核模塊來運行的,運行在內核空間里面。
所以要運行我們自己構造的模塊,需要自己的系統已經配置好內核樹,然后把目標模塊和內核樹連接起來運行!但是我們安裝的Linux沒有源碼(至少我的是這樣),更不要說已經編譯好的內核樹了~
(1)下載Linux源碼:
首先查看可以下載的Linux內核源碼包
root@jiq-desktop:~#apt-cache search linux-source
然后選定要下載的源碼包:
root@jiq-desktop:~#apt-get install linux-source-2.6.22
?下載完成后,在/usr/src下,文件名為:linux-source-2.6.32.tar.bz2,是一個壓縮包,然后用
命令解壓即可獲得Linux內核的源代碼:
root@jiq-desktop:/usr/src#tar jxvf linux-source-2.6.32.tar.bz2
?
?
(2)然后在Linux內核源碼目錄/usr/src/linux-source-2.6.32目錄下面用老的方法配置好Linux內核:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make oldconfig
(3)然后執行:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make bzImage
這個過程大概需要一個小時左右。。。執行完成后會在當前目錄下面生成一個文件vmlinux.o
(4)然后編譯模塊:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make modules
這個過程又是大概一個小時。。。
?
?
(5)然后便可以安裝模塊了:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make modules_install
這個過程大概兩分鐘:
?
?
?以上步驟完成以后,會在/lib/modules目錄下面生成一個文件夾linux-2.6.32-24-generic,至此你差不多已經成了,因為你已經構造好了內核樹!!!
?
下面開始在自己的工程文件夾下面建立兩個文件:
hello.c(不用說了)
Makefile(它需要能夠找到內核樹,然后將目標模塊鏈接上去):
?
?注意里面各種變量的顏色額~有興趣的讀者可以自己去研究一下這個文件,里面唯一和hello.c相關的部分就是
obj-m := hello.o 那一行了!第5行表明了內核樹build目錄的位置。
下面在當前目錄下面執行
root@jiq-desktop:/usr/jiq/DriverProject#make
生成以下文件
?
?
然后利用insmod命令將模塊插入到內核樹 中:
root@jiq-desktop:/usr/jiq/DriverProject#insmod ./hello.ko
模塊裝載觸發hello.c的init()方法,輸出hello world,如果沒有的話,是因為其將輸出放到/var/log/syslog中去了。打開便可以看見你的結果!
卸載目標模塊命令是:
root@jiq-desktop:/usr/jiq/DriverProject#rmmod ./hello.ko
至此你已經成功邁出了Linux驅動開發的第一步~
?
轉載于:https://www.cnblogs.com/armlinux/archive/2010/12/20/2390871.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Linux驱动开发环境配置(内核源码树构造)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PMWiki安装教程
- 下一篇: linux 其他常用命令