设为首页 收藏本站
查看: 978|回复: 0

[经验分享] linux 驱动开发

[复制链接]

尚未签到

发表于 2019-2-17 12:38:03 | 显示全部楼层 |阅读模式
  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.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# 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  等头文件
确实 include里面没有
这个没关系 因为有内核源码先查看内核版本

root@ubuntu:~/Desktop# uname -r
4.2.0-27-generic
root@ubuntu:~/Desktop#
  再写 makefile 文件时用$(shell uname -r) 就可以了





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673573-1-1.html 上篇帖子: linux代码 下篇帖子: Linux 文件管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表