嵌入式驱动
Alen.Wang
智能机器人硕士,擅长复杂电路设计、嵌入式软件编程及系统架构设计,从事嵌入式AI开发工作,有多年项目开发经验。
我的联系邮箱 alen_wp@163.com
展开
-
给Linux驱动添加版本信息
在Linux驱动开发过程中,有的时候需要打印一些驱动版本信息,这样的话方便迭代与维护。原创 2022-11-09 11:04:11 · 527 阅读 · 0 评论 -
matrix_keypad 矩阵按键驱动分析
matrix_keypad 矩阵按键驱动分析//主要函数调用过程matrix_keypad_probe matrix_keypad_parse_dt //根据设备树构造 pdata pdata->num_row_gpios = nrow = of_gpio_named_count(np, "row-gpios"); pdata->num_col_gpios = ncol = of_gpio_named_count(np, "col-gpios"); of_get_prop..原创 2020-05-19 09:40:10 · 1869 阅读 · 0 评论 -
分析内核源码 -- mass_storage.c
分析 mass_storage.cstruct usb_composite_driver { const char *name; const struct usb_device_descriptor *dev; struct usb_gadget_strings **strings; enum usb_device_speed max_speed; unsigned needs_serial:1; int (*bind)(struct usb_composite_de..原创 2020-05-14 13:49:52 · 765 阅读 · 0 评论 -
zynqmp PL设备驱动编写
获取设备树 某个节点信息。#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/module.h>...原创 2020-01-10 14:18:43 · 1910 阅读 · 0 评论 -
卸载驱动时,没有/lib/modules目录
卸载驱动时,没有/lib/modules目录,怎么办?答:没有这个目录,就创建这个目录!#rmmod spi_oled_drv#rmmod: chdir (/lib/modules): no such file or directory#mkdir /lib/modules#rmmod spi_oled_drv#rmmod : chdir (3.原创 2017-03-30 10:38:23 · 1961 阅读 · 0 评论 -
sysfs: cannot create duplicate filename '/class/spi_master/spi1'
在编写SPI驱动程序的时候,遇到如下问题s3c2410-spi s3c2410-spi.0: master is unqueued, this is deprecated------------[ cut here ]------------WARNING: at fs/sysfs/dir.c:508 sysfs_add_one+0x80/0xa4()sysfs:原创 2017-04-12 19:06:52 · 4098 阅读 · 0 评论 -
expected declaration specifiers or '...' before string constant
/work/platform_bus_dev_drv/led_dev.c:52: error: expected declaration specifiers or '...' before string constant/work/platform_bus_dev_drv/led_dev.c:52: warning: data definition has no type or storage原创 2017-04-06 20:34:17 · 10754 阅读 · 2 评论 -
获得内核函数地址的四种方法
本文以获取内核函数 sys_open()的地址为例。 1)从System.map文件中直接得到地址: $ grep sys_open /usr/src/linux/System.map 2)使用 nm 命令: $ nm vmlinuz | grep sys_open 3)从 /proc/kallsyms 文件获得地址:转载 2017-01-05 20:27:24 · 2138 阅读 · 0 评论 -
函数指针和指针函数的区别
一、【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。 1、函数指针定义 顾名思义,函数指针说的就是一个指针,但这个指针指向的函数,不是普通的基本数据类型或者类对象。函数类型(*指针变量名)(形参列表原创 2017-01-03 16:04:41 · 563 阅读 · 0 评论 -
RTC驱动程序分析
drivers\rtc\rtc-s3c.cs3c_rtc_initplatform_driver_registers3c_rtc_probertc_device_register("s3c", &pdev->dev, &s3c_rtcops, THIS_MODULE)rtc_dev_preparecdev_init(&rtc->char_dev, &rt原创 2016-11-04 17:33:33 · 597 阅读 · 0 评论 -
rmmod: chdir(/lib/modules): No such file or directory
内核版本:linux3.4.20交叉编译器:arm-linux-gcc 4.3.3busybox : busybox 1.20问题:使用rmmod会出现 rmmod : chdir(/lib/modules): No such file or directory ?现在的内核模块在插入卸载时都会要转到 “/lib/modules/内核版本号/ ” 这个目录里。原创 2016-12-18 15:06:33 · 827 阅读 · 0 评论 -
USB设备驱动总结
现象:把USB设备接到PC (韦老师总结)1. 右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序问1. 既然还没有"驱动程序",为何能知道是"android phone"答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone" 提示你安装的是原创 2016-04-11 15:10:26 · 507 阅读 · 0 评论 -
Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
英文不错的,可以看看:https://blog.csdn.net/ruanjianruanjianruan/article/details/47734397先看:嵌入式linux下操作GPIO在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实Linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/...转载 2019-03-12 08:37:56 · 9628 阅读 · 0 评论 -
sizeof用法总结
由于不同位数的操作系统计算结果可能不同,下面是在32位的win7 下计算的。 1 对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。#include <stdio.h>int main(){ char a[25]; char *b;...原创 2018-09-21 08:46:31 · 1261 阅读 · 0 评论 -
__setup宏简介
内核组件用__setup宏来注册关键字及相关联的处理函数,__setup宏在include/linux/init.h中定义,其原型如下: __setup(string, function_handler)其中:string是关键字,function_handler是关联处理函数。__setup只是告诉内核在启动时输入串中含有string时,内核要去执行function原创 2016-08-02 14:41:27 · 366 阅读 · 0 评论 -
调色板的原理和调色板显示模式
调色板只有图片的颜色小于等于256色的时候才有,16位高彩和24位32位真彩是没有调色板的. 调色板的存在的意义只是在当初486以前为了节省空间的一种采用索引的压缩算法,现在没有人这种东西。 调色板是为了节约空简所用的,相当于一个索引。只有1...原创 2016-04-03 19:04:02 · 4493 阅读 · 6 评论 -
LCD驱动程序
LCD驱动程序假设app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0--------------------------------------------------------------kernel: fb_open int fbidx = iminor(inode);原创 2016-04-02 18:03:15 · 709 阅读 · 0 评论 -
块设备驱动程序
框架:app: open,read,write "1.txt"--------------------------------------------- 文件的读写文件系统: vfat, ext2, ext3, yaffs2, jffs2 (把文件的读写转换为扇区的读写)-----------------ll_rw_block-------------原创 2016-04-25 16:23:19 · 436 阅读 · 0 评论 -
usb设备驱动程序
韦老师写的,供参考/* * drivers\hid\usbhid\usbmouse.c */#include #include #include #include #include #include static struct input_dev *uk_dev;static char *usb_buf;static dma_ad原创 2016-04-16 17:37:19 · 603 阅读 · 0 评论 -
NOR FLASH驱动程序
NOR NAND接口: RAM-Like,引脚多 引脚少,复用容量: 小 1M 2M 3M 大:128M 256M G读: 简单 复杂写原创 2016-04-21 20:44:51 · 621 阅读 · 0 评论 -
NAND FLASH 驱动分析
韦老师总结:NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址,问2. 从NAND FLASH芯片手册可知,要操作NAND原创 2016-05-09 13:43:22 · 1081 阅读 · 0 评论 -
local_irq_save 与 local_irq_restore
如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 中: void local_irq_save(unsigned long flags); void local_irq_disable(void); 对 local_irq_save的调用将把当前中断状态保存到flags中,然后禁用当转载 2016-07-27 17:29:20 · 11370 阅读 · 0 评论 -
注册驱动时如何调用probe函数 ?
platform_driver_registerdriver_registerbus_add_driverdriver_attachbus_for_each_dev(drv->bus, NULL, drv, __driver_attach);//遍历该总线上所有的device,执行一次__driver_attach(),看能不能将驱动关联(attach)到某个设备上去。__dr原创 2016-03-28 15:00:38 · 1438 阅读 · 0 评论