您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Linux Kernel怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Linux Kernel怎么使用”吧!
Linux Kernel支持好幾種模塊類型,包括設備驅(qū)動程序。每個模塊由目標代碼組成,不是一個完整的可執(zhí)行程序。系統(tǒng)運行時,我們可以通過insmod將模塊連接到正在運行的內(nèi)核中去。也可以使用lsmod列出已加載模塊,rmmod或modprobe –r 移除模塊。
Linux系統(tǒng)將設備分為三種基本類型:字符設備,塊設備,網(wǎng)絡接口。
字符設備是能夠像字節(jié)流一樣被訪問的設備,一般只能順序訪問。其操作類似文件操作。
塊設備上能夠容納文件系統(tǒng),可以通過文件系統(tǒng)隨機訪問。其操作也類似于文件操作。
網(wǎng)絡接口是負責數(shù)據(jù)包的傳輸和接收的,一般無法影射到文件系統(tǒng)的節(jié)點。它與內(nèi)核的通信跟前面兩種設備不同,而是通過socket方式。在系統(tǒng)和驅(qū)動程序之間定義有專門的數(shù)據(jù)結構(sk_buff)進行數(shù)據(jù)的傳遞。系統(tǒng)里支持對發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的緩存,提供流量控制機制,提供對多協(xié)議的支持。
在編寫模塊的時候,應該注意,模塊僅僅被連接到內(nèi)核,所以它只能調(diào)用由內(nèi)核導出的那些函數(shù),而不能調(diào)用其他的本模塊未定義的函數(shù)。
在Linux kernel2.6.X下進行模塊開發(fā)時,需要預先準備好“kernel tree(內(nèi)核樹)”,即獲得與本系統(tǒng)相同的內(nèi)核的源代碼并編譯出目標文件。
一個最簡單的hello world驅(qū)動例子:
hello_world.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);
Makefile: obj-m := hello.o KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
其中,源文件中的module_init和module_exit指定了模塊被加載時執(zhí)行的初始化函數(shù)和卸載時執(zhí)行的清理函數(shù)。另外可以使用module_param指定加載模塊時可以設置的參數(shù)。Makefile中的obj-m指定了使用make modules時候構造*.ko目標文件時使用的*.o目標文件。
到此,相信大家對“Linux Kernel怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。