摘要:本文主要向大家介绍了C/C++知识点之linux 驱动开发,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之linux 驱动开发,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
1.安装 linux
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
用命令 tail /var/log/kern.log查看日志
root@ubuntu:~/Desktop# makemake -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.logAug 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.logAug 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 -r4.2.0-27-generic root@ubuntu:~/Desktop#
再写 makefile 文件时用$(shell uname -r) 就可以了
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号