linux驅動開發之核心樹配置

2021-07-08 12:12:59 字數 2901 閱讀 4813

在看的時候,作者其中提到setting up your test system。他只是指出為2.6.x編寫模組,首先,要求你在linux系統上構建和配置核心樹,對於2.6版本的核心來說,已有的標頭檔案已經足夠了,但是2.6的模組鏈結著核心原始碼樹中的物件檔案。這樣模組載入器將更健壯,但是也要求這些物件檔案存在。所以驅動開發的第一件事情就是構建核心原始碼樹。
他沒有提到如何構建,我從網上找了一些資料,構建了自己的核心樹,寫出來大家分享一下。

本人使用的是debian 8, 如果是虛擬機器的話,記憶體最好要大於15g,不然可能不夠用。

首先檢視自己的linux核心的版本,在終端中輸入: uname -r(也可以使用uname -a 來檢視更具體的資訊)

然後進入 usr/src/下檢視是否有linux-source 檔案,一般是沒有的,至少我的debian 8沒有

沒有就去網上查詢,在終端中輸入: apt-cache search linux-source

可以看到結果:

linux-source-3.16 - linux kernel source for version 3.16 with debian patches

linux-source - linux kernel source (meta-package)

xz−

dlin

ux−s

ourc

e−3.16.ta

r.xz

tar jxvf linux-source-3.16.tar

解壓得到檔案源**檔案,該源**資料夾名稱為linux-source-3.16,進入該目錄,注意此時在終端中應該是這樣的:

lightmouse@lightmouse:/usr/src/linux-source-3.16$

因為解壓出來的源**資料夾位於linux-source-3.16下,所以有兩層。

開始配置核心,選擇最快的原版的配置(預設)方式:在終端中輸入:make oldconfig

然後編譯模組,定位到源**資料夾下,在終端中輸入: make modules

等待將近1個小時,該編譯完成。完成之後,安裝模組,在終端中輸入:make modules_install

至此,原始碼樹構建完成,重啟系統,

將《linux device driver third edition》中的第乙個例子執行下吧。

文中**:helloworld.c

[cpp] view plaincopy

#include#includemodule_license("dual bsd/gpl");  

static int hello_init(void)

static void hello_exit(void)

module_init(hello_init);

module_exit(hello_exit);

makefile檔案內容:

[cpp] view plaincopy

obj-m := helloworld.o #必須與helloworld.c檔名稱相同。  

kerneldir := /lib/modules/linux/build

pwd := $(shell pwd)

modules:

$(make) -c $(kerneldir) m=$(pwd) modules

modules_install:

$(make) -c $(kerneldir) m=$(pwd) modules_install

編譯,在終端中輸入:make

[cpp] view plaincopy

jk1860@jk1860-machine:~/driverlinux$ make  

make -c /lib/modules/linux/build m=/home/jk1860/driverlinux modules

make[1]: 正在進入目錄 `/usr/src/linux-headers-2.6.35-22-generic'

building modules, stage 2.

modpost 1 modules

make[1]:正在離開目錄 `/usr/src/linux-headers-2.6.35-22-generic'

然後載入模組 (root使用者)

root@jk1860-machine:/home/shana/driver# insmod ./helloworld.ko

按照書上的例子 會在終端顯示 hello , world 但是執行後什麼都沒有出現 (原因不解)

root@jk1860-machine:/home/shana/driver# insmod ./helloworld.ko

檢視載入模組

root@jk1860-machine:/home/shana/driver# lsmod

module size used by

helloworld 2560 0

刪除模組

root@jk1860-machine:/home/shana/driver# rmmod helloworld

書中說明,如果不出現在終端,則會寫進 syslog 檔案中

root@jk1860-machine:~# cat /var/log/syslog |grep world

jan 20 10:21:23 jk1860-machine kernel: [ 1683.984471] hello world

jan 20 10:22:35 jk1860-machine kernel: [ 1755.752461] goodbye, cruel world

驅動開發環境搭建完成。

Linux驅動開發環境配置 核心原始碼樹構造

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 u...

linux 驅動開發環境配置 核心原始碼樹構造

linux驅動開發環境配置 核心原始碼樹構造 初次接觸linux驅動程式開發,買了一本 linux裝置驅動程式 第一件事當然就是構建開發環境了!它上面有乙個hello world的列子 include include module license dual bsd gpl static int he...

Linux驅動開發環境配置 核心原始碼樹構造

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 u...