Linux内核驱动
colorfulshark
目前在研究嵌入式Linux,希望能结识志同道合的朋友
展开
-
【Linux内核】Ubuntu下printk函数无法在终端显示
在Ubuntu下使用insmod安装模块的时候,发现预设的调试信息并没有输出,但是使用dmesg命令可以看到在日志中确实有调试信息,下面分析一下可能的情况。printk信息的输出去向这是在内核的命令行参数console=ttyXXX里指定死了,比如console=tty1表示printk的信息输出到终端1。如果是这种情况,你需要使用Ctrl+Alt+(F1-F6)来切换终端。日志输出级别过低用pr原创 2017-06-28 09:16:42 · 4110 阅读 · 1 评论 -
【OpenWrt】使用SDK编译Linux内核驱动
很多路由器都有USB接口,当路由器搭载OpenWrt(LEDE)系统后,理论上可以使用任何USB接口的设备,常见的设备比如各种存储设备、USB网卡等。但是如果内核中没有集成相关的驱动,并且源中也没有提供该设备的kmod,那么就需要自己寻找驱动源码并编译为驱动模块。 OpenWrt官方提供了一套编译系统,使用feed/package模式,但是如果不是专门开发OpenWrt,熟悉这一套开发环境需要原创 2018-01-01 17:01:38 · 5043 阅读 · 1 评论 -
【Linux内核驱动】搭建Android驱动交叉编译环境
开发嵌入式Linux驱动模块的时候,搭建交叉编译环境是至关重要的一环,它决定了代码可以在哪些设备上运行。在开发Android驱动的时候,同样需要搭建交叉编译环境,Android使用一套独立的开发套件——NDK。什么是NDKNDK是一系列工具的集合。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。N原创 2017-12-06 13:56:13 · 1278 阅读 · 0 评论 -
【Linux内核驱动】模块编译技巧
如何指定处理器架构和交叉编译器版本?export ARCH=armexport CROSS_COMPILE=/usr/arm/arm-linux-如何编译源码目录中的特定模块export SUBDIRS=<module dir>如何设定内核的version magic 有时候我们无法获取设备的内核源码或者获得的源码与设备中的内核版本不同,此时如果安装内核模块会提示Exec format err原创 2017-12-05 13:53:28 · 539 阅读 · 0 评论 -
【Linux内核驱动】按键中断
中断注册函数:request_irqrequest_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) 参数1:irq,中断号。(和平台架构相关,结合datasheet以及平台文件) 参数2:中断处理函数 参数3:中断标记。原创 2017-11-19 15:14:56 · 945 阅读 · 0 评论 -
【Linux内核驱动】编写I2C外设驱动读取触摸屏固件版本
编写I2C外设驱动步骤注册I2C设备,一般在板级文件中,定义i2c_board_info注册I2C驱动:i2c_register_driver,i2c_del_driver利用i2c_client中的addr(设备地址)和adapter(主机驱动)实现I2C数据传输:填充i2c_msg并调用i2c_transfer#include <linux/kernel.h>#include <lin原创 2017-11-18 17:04:06 · 1175 阅读 · 0 评论 -
【Linux内核驱动】基于platform总线的miscdevice驱动(LED)
驱动模块编写步骤:调用所需的内核函数,同时为所需的结构体命名补全所需的结构体,使用vim -t查找结构体声明通过结构体声明所在的文件补全头文件#include <linux/kernel.h>#include <linux/module.h>#include <linux/platform_device.h>#include <linux/miscdevice.h>#include原创 2017-11-17 20:57:44 · 660 阅读 · 0 评论 -
【Linux内核驱动】字符设备驱动框架模板
#include <linux/kernel.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/device.h>#include <linux/err.h>int xxx_open(struct inode *inodp, struct file *filp);原创 2017-09-05 11:34:30 · 1239 阅读 · 0 评论 -
【Linux内核驱动】最小内核模块模板
#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("colorfulshark@hotmail.com");static int xxx_init(void){ printk(KERN_ALERT "module xxx init\n")原创 2017-11-07 21:26:57 · 627 阅读 · 0 评论 -
【Linux内核驱动】编译Linux下mt7612u的驱动
最近项目中使用了一个wifi模块,主控是mt7612u,为usb接口。使用的Linux版本为2.6.35,在编译驱动的过程中遇到不少问题,特在此记录。获取源码MTK官网驱动。包含Windows、Linux以及Mac下的驱动。我修改的Github驱动。添加新的Platform在源码中内置了一些硬件平台的配置信息,如果没有适配于你所使用平台的信息,需要手动添加配置信息。原创 2018-01-20 22:16:30 · 14691 阅读 · 3 评论