热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux驱动开发

1.安装linux2.写helloworldhello.c#include*Neededbyallmodules*#include

1.安装 linux
2.写 hello world
//hello.c

#include /*Needed by all modules*/
#include /*Needed for KERN_* */
#include /* 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.oKERNELDIR ?= /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# 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.oCC [M] /root/Desktop/hello.oBuilding modules, stage 2.MODPOST 1 modulesCC /root/Desktop/hello.mod.oLD [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 等头文件
确实 include里面没有
这个没关系 因为有内核源码先查看内核版本

root@ubuntu:~/Desktop# uname -r
4.2.0-27-generic
root@ubuntu:~/Desktop#

再写 makefile 文件时用$(shell uname -r) 就可以了

linux 驱动开发

转:https://blog.51cto.com/haidragon/2164619



推荐阅读
author-avatar
pipipa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有