linux驱动day1

kernel五大功能:文件管理,进程管理,网络管理,内存管理,设备管理

设备管理:设备驱动管理

                                        字符设备驱动

                                         块设备驱动

linux内核三要素----

ctags工具的使用

        安装: sudo apt-get install ctags

        创建索引: ctags -R     索引文件名:tags

         内核目录下makefile实现了ctags   

        命令:make tags

         追代码  vi -t  内容

          快捷键  ctrl +]                   ctrl+t

 驱动静态编译(内部编译)

        1.拷贝demo.c 到内核drivers/char目录下

        2.在drivers/char目录下找到Kconfig文件,参考其他,添加选项菜单

        3.在顶层目录下执行make menuconfig ,修改drivers/char 下的菜单

        (4.)修改后可在.config下查看保存的信息

        4.到drivers/char 目录下修改makefile文件(参考其他修改)

        5.编译内核 命令

 make uImage

        外部编译

#KERNELDIR=/home/linux/kernel/kernel-3.4.39/

#KERNELDIR=/lib/moudles/$(shell uname -r)/build/

PWD=$(shell pwd)
MNAME?=demo
all:
    make -C $(KERNELDIR) M=$(PWD) modules
    
    // make -c目录  到该目录下执行make命令
    //M=$(PWD)指定编译模块路径
    //modules 编译模块

clean:
    make -C $(KERNELDIR) M=$(PWD) clean

obj-m:=$(MNAME).o

模块安装卸载命令

        安装: insmod xx.ko 

        查看: lsmod

        卸载: rmmod xxx    (无.ko)

内核中的打印

        printk(打印级别"");

        vi -t KERN_EMERG    "<0>"

               也可以直接使用<0>

内核中打印级别定义

       

cat /proc/sys/kernel/printk
//查看开发板中的级别
cat /sys/kernel/printk
//查看ubuntu中的级别
//echo可以进行修改 

                4                        4                        1                                7

                终端级别         默认消息级别       终端最高级别         终端最低级别

导出符号表

         在一个内核模块中调用另外一个内核模块中的函数。需要提供者将函数的符号表导出给调用者直接使用。

作用:

        1.解决代码冗余问题。

        2.编写内核驱动时,内核工程师提供给驱动工程师一些接口。

代码

int add(int a,int b)
{
    return (a+b);
}

EXPORT_SYMBOL_GPL(add);
//宏定义实现

编译会生成 module.symvers 文件,即记录add函数的符号表

使用者需要将此文件拷贝到自己的目录下

安装顺序:

        提供者先安装

卸载顺序:

        调用者先卸载

内核模块传参

1.安装时候传参

sudo insmod demo.ko a=100 b=20

2.驱动运行时候传参

/sys/module/驱动命名的目录/parameters/

        参数文件:其他用户无写权限

函数:

        module_param(name,type,perm)

        功能:接受内核传递的参数

        参数:

                @name:变量名

                @type  :变量类型

                @权限  :权限(0664 0775)(其他用户无可写权限)

        MODULE_PARM_DESC(a,"this is para")  ;

           功能:变量的描述

           参数:

                        @变量名

                        @描述字段

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值