linux 驅動開發
阿新 • • 發佈:2018-08-27
分享 ups repl 文件 session obj duplex tor nat 1.安裝 linux
2.寫 hello world
//hello.c 用命令 tail /var/log/kern.log查看日誌
2.寫 hello world
//hello.c
#include <linux/kernel.h> /*Needed by all modules*/ #include <linux/module.h> /*Needed for KERN_* */ #include <linux/init.h> /* Needed for the macros */ MODULE_LICENSE("GPL"); static int year=2014; static int hello_init(void) { printk(KERN_WARNING "Hello kernel, it‘s %d!\n",year); return 0; } static void hello_exit(void) { printk("Bye, kernel!\n"); } /* main module function*/ module_init(hello_init); module_exit(hello_exit);
obj-m := hello.o 表示編譯成模塊,後面寫對應文件名稱加.o
Makefile
obj-m := hello.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD)
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
安裝模塊命令 insmod ./hello.ko
刪除 rmmod ./hello.ko
root@ubuntu:~/Desktop# make make -C /lib/modules/4.2.0-27-generic/build M=/root/Desktop make[1]: Entering directory `/usr/src/linux-headers-4.2.0-27-generic‘ LD /root/Desktop/built-in.o CC [M] /root/Desktop/hello.o Building modules, stage 2. MODPOST 1 modules CC /root/Desktop/hello.mod.o LD [M] /root/Desktop/hello.ko make[1]: Leaving directory `/usr/src/linux-headers-4.2.0-27-generic‘ root@ubuntu:~/Desktop# insmod ./hello.ko root@ubuntu:~/Desktop# tail /var/log/kern.log Aug 26 05:54:38 ubuntu kernel: [ 11.882941] audit: type=1400 audit(1535288078.331:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/lightdm/lightdm-guest-session" pid=825 comm="apparmor_parser" Aug 26 05:54:38 ubuntu kernel: [ 12.138198] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready Aug 26 05:54:38 ubuntu kernel: [ 12.423300] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None Aug 26 05:54:38 ubuntu kernel: [ 12.436023] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Aug 26 05:55:05 ubuntu kernel: [ 39.322268] audit_printk_skb: 150 callbacks suppressed Aug 26 05:55:05 ubuntu kernel: [ 39.322272] audit: type=1400 audit(1535288105.459:62): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/lib/cups/backend/cups-pdf" pid=2171 comm="apparmor_parser" Aug 26 05:55:05 ubuntu kernel: [ 39.322282] audit: type=1400 audit(1535288105.459:63): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/cupsd" pid=2171 comm="apparmor_parser" Aug 26 05:55:05 ubuntu kernel: [ 39.322809] audit: type=1400 audit(1535288105.459:64): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/cupsd" pid=2171 comm="apparmor_parser" Aug 26 06:15:14 ubuntu kernel: [ 1248.118385] hello: module verification failed: signature and/or required key missing - tainting kernel Aug 26 06:15:14 ubuntu kernel: [ 1248.121354] Hello kernel, it‘s 2014! root@ubuntu:~/Desktop# rmmod ./hello.ko root@ubuntu:~/Desktop# tail /var/log/kern.log Aug 26 05:54:38 ubuntu kernel: [ 12.138198] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready Aug 26 05:54:38 ubuntu kernel: [ 12.423300] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None Aug 26 05:54:38 ubuntu kernel: [ 12.436023] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Aug 26 05:55:05 ubuntu kernel: [ 39.322268] audit_printk_skb: 150 callbacks suppressed Aug 26 05:55:05 ubuntu kernel: [ 39.322272] audit: type=1400 audit(1535288105.459:62): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/lib/cups/backend/cups-pdf" pid=2171 comm="apparmor_parser" Aug 26 05:55:05 ubuntu kernel: [ 39.322282] audit: type=1400 audit(1535288105.459:63): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/cupsd" pid=2171 comm="apparmor_parser" Aug 26 05:55:05 ubuntu kernel: [ 39.322809] audit: type=1400 audit(1535288105.459:64): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/cupsd" pid=2171 comm="apparmor_parser" Aug 26 06:15:14 ubuntu kernel: [ 1248.118385] hello: module verification failed: signature and/or required key missing - tainting kernel Aug 26 06:15:14 ubuntu kernel: [ 1248.121354] Hello kernel, it‘s 2014! Aug 26 06:16:13 ubuntu kernel: [ 1306.921227] Bye, kernel! root@ubuntu:~/Desktop#
出現的問題
1.用 ide 可能報找不到#include <linux/kernel.h> 等頭文件
確實 include裏面沒有
這個沒關系 因為有內核源碼先查看內核版本
root@ubuntu:~/Desktop# uname -r
4.2.0-27-generic
root@ubuntu:~/Desktop#
再寫 makefile 文件時用$(shell uname -r) 就可以了
linux 驅動開發