驱动笔记day1

一、模块

1.模块
    是一个功能代码的集合,依附于操作系统,在内核空间
    可以动态的添加到系统,也可以动态的从系统卸载,系统不受影响


2.怎么运行?
    系统启动之后分为用户空间和内核空间:应用程序运行在用户空间,当应用程序段错误时不会对内核造成影响,同时,用户空间是不能之间访问内核空间,更安全。模块加载到系统运行,可以直接从系统卸载,系统不受影响,如果段错误了,则会导致系统奔溃。
    
3.模块与应用程序区别
                应用程序                                          模块
    
    ./程序名执行完结束了                   当加载到系统时会一直存在,直到模块卸载
    用户空间                                      内核空间,权限更大
    段错误不会造成系统奔溃             段错误会导致系统奔溃
    从头到尾都是单任务                     预先注册到系统,被动被调用

二、Makefile编写

 1 PWD = $(shell pwd)     /*自己模块的路径*/
 2 KERNELDIR=/home/hqyj/driver/linux-3.14  /*你自己的linux-3.14的路径*/
 3 
 4 obj-m := mymod.o  /* 让编译器将mymod.c编译成mymod.o */
 5 mymod-objs :=  mymod1.o mymod2.o  /* mymod-objs把mymod1.o mymod2.o处理成mymod.o提供给obj-m */
 6 all:
 7     make -C $(KERNELDIR) M=$(PWD) modules   /*进入到内核目录下借助内核的Makefile将我们自己的mymod.o编译成mymod.ko*/ 
 		cp *.ko /home/hqyj/mydd/rootfs
 8 clean:
 9     make -C $(KERNELDIR) M=$(PWD) clean 

三、加载和卸载模块

1.先搭建nfs环境

set bootargs root=/dev/nfs nfsroot=192.168.7.48:/home/wangdefa/mydd/rootfs,v3 rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.7.147

2.加载和卸载模块
    insmod mymod.ko  //加载模块到系统  调用mymod_init
    lsmod //显示模块
    rmmod mymod //卸载模块            调用mymod_exit

【错误】error: can not change directory /lib/modules
    解决方法:
        mkdir /lib/modules/3.14.0
        rmmod mymod

四、模块传参

module_param(参数名,参数类型,权限)
eg:
    module_param(name,charp,0);//指定给name传参
    
【验证】
    insmod mymod.ko name="myled" num=200

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值