我來說下吧 本身你這個問題問的有點歧義 不知道你問的是內核編譯 還是模塊編譯 兩個不是一個東西 盡管模塊載入後 也是內核的一部分 看看其他的回答 以為是單純的內核的編譯了 模塊本身在linux下面是可以分為靜態和動態載入的 要是採用靜態載入的話 就是從新編譯內核 和內核的編譯基本是一回事 但是多採用動態載入 這個也簡單點
從你的下面的模版可以看出 你是想寫驅動程序吧 驅動一般作為動態載入的就可以了 寫好你的c文件 格式和上面的差不多 然後GCC編譯 生成.o文件,不要生成可執行文件 ( 如果是玩Embedded 就下載到目標板了 minicom 的使用) 如果是就在linux機器上 直接執行 insmod lsmod rmmod 這些就好了 這里也是簡單的說下了 內核的編譯 寫驅動程序 本身就是個比較難得事情了 要個很長的時間去學習了 慢慢積累 好運
❷ linux的編譯內核和編譯內核模塊有什麼區別
當然需要。。。
第一點,就是源碼樹中有相應的頭文件和函數的實現,沒有源碼樹,你哪調用去呢?(PC上編譯的時候內核有導出符號,系統中有頭文件,這樣就可以引用內核給你的介面了,但是只能編譯你PC上版本的內核可載入的模塊)。
第二個,內核模塊中會記錄版本號的部分,需要記錄版本號的原因是不同的內核版本之間,那些介面和調用可能會有比較大的差異,因此必須要保證你的代碼和某個特定的內核對應,這樣編譯出來的模塊就可以(也是只能)在運行這個內核版本的Linux系統中載入,否則一個很簡單的異常就會導致內核崩潰,或者你的代碼根本無法編譯通過(介面名變了)。
我上面說的是編譯模塊的情況,當然如果是把模塊直接編譯到內核當中去的話,那就不用說了,沒有內核源碼,你無法編譯內核。
❸ 如何編譯Linux內核
編譯linux內核步驟:
1、安裝內核
如果內核已經安裝(/usr/src/目錄有linux子目錄),跳過。如果沒有安裝,在光碟機中放入linux安裝光碟,找到kernel-source-2.xx.xx.rpm文件(xx代表數字,表示內核的版本號),比如RedHat linux的RPMS目錄是/RedHat/RPMS/目錄,然後使用命令rpm -ivh kernel-source-2.xx.xx.rpm安裝內核。如果沒有安裝盤,可以去各linux廠家站點或者www.kernel.org下載。
2、清除從前編譯內核時殘留的.o 文件和不必要的關聯
cd /usr/src/linux
make mrproper
3、配置內核,修改相關參數,請參考其他資料
在圖形界面下,make xconfig;字元界面下,make menuconfig。在內核配置菜單中正確設置個內核選項,保存退出
4、正確設置關聯文件
make dep
5、編譯內核
對於大內核(比如需要SCSI支持),make bzImage
對於小內核,make zImage
6、編譯模塊
make moles
7、安裝模塊
make moles_install
8、使用新內核
把/usr/src/linux/arch/i386/boot/目錄內新生成的內核文件bzImage/zImage拷貝到/boot目錄,然後修改/etc/lilo.conf文件,加一個啟動選項,使用新內核bzImage/zImage啟動。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告訴lilo預設使用新內核啟動linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留舊有的啟動選項可以保證新內核不能引導的情況,還可以進入linux進行其他操作。保存退出後,不要忘記了最重要的一步,運行/sbin/lilo,使修改生效。
9、重新生成ram磁碟
如果您的系統中的/etc/lilo.conf沒有使用了ram磁碟選項initrd,略過。如果您的系統中的/etc/lilo.conf使用了ram磁碟選項initrd,使用mkinitrd initrd-內核版本號,內核版本號命令重新生成ram磁碟文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之後把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁碟能使系統性能盡可能的優化,具體參考/usr/src/linux/Documents/initrd.txt文件
10、重新啟動,OK!
❹ 編譯內核和編譯內核模塊有什麼區別(linux)
LINUX 的內核編譯
1.編譯內核指的時通常的內核
2.應為內核可以將驅動和功能模塊動態的載入內核,所以在需要的時間把功能模塊
動態載入,所以就有了,內核模塊的編譯
❺ linux編譯好了內核,也編譯好了內核模塊,最後內核放在fllash中,內核模塊放哪裡
問題補充:如題了,linux模塊編程為什麼要編譯內核源碼樹。以及為什麼內核版本當然需要。。。 第一點,就是源碼樹中有相應的頭文件和函數的實現,沒有
❻ 在linux中編寫了一個小的內核模塊,怎麼編譯成.ko文件
從網上找一個編譯模塊的Makefile,放到你的模塊的文件夾裡面,然後修改裡面的路徑指定編譯的內核,以及目標名稱。make就可以了。
❼ linux編譯內核時,到安裝內核模塊:#make moles_install 時,過程中提示設備上沒有空間
建議裁剪內核,內核中很多驅動模塊,子系統等一般用戶都用不上,我在我自己的電腦上裁剪後編譯的內核源碼樹大小隻有700多M~
❽ Linux內核模塊多文件編譯問題
頂一下頂一下頂一下頂一下頂一下頂一下
❾ linux內核怎麼單獨編譯驅動模塊
你可能需要手動創建設備節點,首先cat /proc/device 看看能否找到video的設備號,再用mknod命令創建/dev/下的設備節點,如果沒有再考慮去內核make menuconfig查看相關驅動選項有沒有勾上。
❿ Linux編寫內核模塊編譯時找不到頭文件
-I /usr/src/linux-headers-2.6.32-24/include 其中, -I和後面的路徑沒有空格
-I/usr/src/linux-headers-2.6.32-24/include
一般也很少直接用gcc命令, 大部分是用makefile, make -C kernel_path moles