
linux驱动
文章平均质量分 56
lbaihao
zephyr,data structure, algorithm, protocol,darknet,architecture
展开
-
Linux内核中链表的实现与应用
链表(循环双向链表)是Linux内核中最简单、最常用的一种数据结构。 1、链表的定义 struct list_head { struct list_head *next, *prev; } 这个不含数据域的链表,可以嵌入到任何数据结构中,例如可按如下方式定义含有数据域的链表: struct my_list { ...原创 2022-03-23 09:42:13 · 591 阅读 · 2 评论 -
pinctrl子系统
pinctrl子系统:(1)获取设备树中pin信息(2)根据获取到的pin信息来设置pin的复用功能(3)根据获取到的pin信息来设置pin的电气特性,比如上/下拉、速度、驱动能力等原创 2021-11-17 08:46:29 · 372 阅读 · 0 评论 -
MCU OTG Host KHCI协议栈简介
OTG Host 协议栈简介本文主要方便用户理解 OTG 协议栈的关键性程序结构及文件结构。加快用户前期开发。例程介绍usb_host_hid_mouse本例程模拟主机枚举鼠标,并将鼠标移动信息通过串口打印。usb_host_hid_mouse_keyboard本例程模拟主机枚举鼠标及键盘,并将鼠标及键盘输入通过串口打印。usb_host_msd_command本例程模拟主机枚举U盘,并且测试读写信息是否可行,并通过串口打印测试结果。文件结构介绍├─boards│ └─MT0.原创 2021-10-13 13:58:06 · 538 阅读 · 0 评论 -
linux LCD调试
1. 开机LOGO在UI层。 2. UI层在顶层。 3. UI层使用图片自带的ALPHA。 4. 开机LOGO的ALPHA为不透明。 5. 开机LOGO一直存在。基于以上原因,若未清framebuffer,其它图层的画面会被开机LOGO一直盖住,做类似sensor画面出图像DEMO时,可能会造成“图像不显示”的假象。不运行应用程序的情况下,可以执行下面这条命令清除framebuffer(置原创 2015-07-15 14:21:40 · 8116 阅读 · 0 评论 -
Android (Linux) Suspend流程
1. Linux Suspend简介 Linux Suspend主要有以下三步: 1) 冻结用户态进程和内核态任务 2) 调用注册的设备的suspend的回调函数,顺序是按照注册顺序 3) 休眠核心设备和使CPU进入休眠态。 冻结进程(suspend_freeze_processes)是内核把进程列表中所有的进程的状态都设置为停止,并且保存所有进程的上转载 2015-08-20 23:39:59 · 834 阅读 · 0 评论 -
linux输入子系统--按键驱动
这一节,我们来以输入子系统的框架来写一个按键驱动。问:怎么写符合输入子系统框架的驱动程序?答:1. 分配一个input_dev结构体2. 设置3. 注册4. 硬件相关的代码,比如在中断服务程序里上报事件问:如何分配input_dev结构体?答:使用input_allocate_device函数input_dev结构体的重要成员struct inp原创 2016-03-07 20:55:43 · 721 阅读 · 0 评论 -
linux设备树
1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach原创 2016-04-27 21:51:22 · 5715 阅读 · 0 评论 -
ARM Linux的启动全过程
ARM Linux的启动全过程解图解ARM-Linux的启动全过程:内核自解压阶段—>内核引导阶段—>内核初始化阶段—>BusyBox初始化阶段原创 2016-04-18 22:32:42 · 659 阅读 · 0 评论 -
Linux驱动模型(六)
Linux 3.4的设备驱动模型中,所有的device都是通过Bus相连。device_register() / driver_register()执行时通过枚举BUS上的Driver/Device来实现绑定,本文详解这一过程。这是整个LINUX设备驱动的基础,PLATFORM设备,I2C上的设备等诸设备的注册最终也是调用本文讲述的注册函数来实现的。 Linux Device的注册原创 2016-05-19 22:41:34 · 381 阅读 · 0 评论 -
linux camera V4L2框架(一)
1.V4L2 驱动中的核心结构体v4l2_device;一个v4l2的总设备。v4l2_sbudev:来描述camera等sensor设备,一般是指挂接在总线(i2c)上的摄像头video_device:实际和处理器采集口相关的配置,一般该设备会完成注册以/dev/video0,video1的字符设备注册的形式暴露给应用层。 video_device的重要性原创 2016-05-20 23:05:14 · 3434 阅读 · 2 评论 -
Linux驱动学习笔记之触摸屏驱动
触摸屏归纳为输入子系统,这里主要是针对电阻屏,其使用过程如下当用触摸笔按下时,产生中断。在中断处理函数处理函数中启动ADC转换x,y坐标。ADC结束,产生ADC中断在ADC中断处理函数里上报(input_event)启动定时器再次启动定时器(可以处理滑动、长按)松开按键其驱动程序的写法和之前写输入子系统的写法基本上一致。写原创 2016-06-18 07:32:15 · 406 阅读 · 0 评论 -
linux PINCTRL
Pinctrl框架是linux系统为统一各SOC厂商pin管理,避免各SOC厂商各自实现相同pin管理子系统而提出的。目的是为了减少SOC厂商系统移植工作量。许多SoC 内部都包含pin 控制器,通过pin 控制器,我们可以配置一个或一组引脚的功能和特性。在软件上,Linux 内核pinctrl驱动可以操作pin 控制器为我们完成如下工作:Ø 枚举并且命名pin控制器可控制的所有引脚原创 2016-08-28 23:14:11 · 6437 阅读 · 0 评论 -
linux设备驱动程序之SPI nor flash
(1)检查MCLK\MOSI\MISO 电压是否是3.3V左右,满足nor flash datasheet的电压(2)提高MCLK drving能力(3)GPIO 引脚是否配置正确(4)CHIP ID 是否能读取(5)多次读取状态寄存器,分析状态寄存器是否有错误的值错误的log:squshfs 读取错误原创 2016-10-28 20:06:09 · 4228 阅读 · 0 评论 -
Linux /Android ARM 64 bit/32 bit 编程移植
32bit user @ 64 bit kernell Usecompat_ioctl( ) but not onlyunlock_ioctl() in kernel driverlcompat_ioctl( ) :支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCT原创 2016-11-17 23:52:30 · 3849 阅读 · 0 评论 -
Linux的发展历程与变迁
最开始,Linux 作为创作者 Linus Torvalds 的 “一个爱好”,如今,已然拥有超高的人气,这过程值得一讲。 1991:Linux 开始于 Linus Torvalds 在 Usenet 上的一个帖子,说它“只是一个爱好“。1992:Linux 发布第一个 GPL 版本, 最初是依据一些商业限制进行许可。1993:在 Linux 根据 GPL 许可证发布后,第原创 2017-01-08 21:48:00 · 1242 阅读 · 0 评论 -
Linux system函数返回值
例: status = system("./test.sh"); status = system("./test.sh");1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返转载 2015-09-01 18:38:51 · 630 阅读 · 0 评论 -
linux 并发控制
竞态通常是在对共享资源的访问的时候产生的。当两个执行线程需要访问相同的数据结构时,就会出现。所以应该尽量少的使用共享数据。临界区:在任意的时刻,代码只能被一个线程执行。休眠:当linux进程到达某个时间点,此时他不能进行任何处理时,它将进入休眠状态,这将把处理器让给其他执行线程直到将来它能够继续完成自己的处理为止。Linux信号量的实现头文件信号量的声明和初始化:转载 2015-08-06 11:43:27 · 489 阅读 · 0 评论 -
linux input子系统(一)
root@xxx:/sys/class/input/input0 # cat name sungpiokeyroot@xxxx:/sys/class/input/input0 # cd ..root@xxxx:/sys/class/input # lsevent0event1event2event3inp原创 2015-07-27 10:08:43 · 625 阅读 · 0 评论 -
linux gsensor demo
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.原创 2015-07-16 10:00:49 · 1677 阅读 · 0 评论 -
堆和栈
int main(){while(1);}BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 编译后,就会发现这么个程序已用了1600多的RAM,要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析map,你会发现是堆和栈占用的,在startup_stm32f10x_md.s文件原创 2015-08-11 22:50:55 · 492 阅读 · 0 评论 -
linux reboot flow
kernel_restart==>>kmsg_dump ==>>machine_restart==>arm_pm_restart(reboot_mode, cmd);log:root@camdroid:/ # reboot[ 256.064771] SysRq : Emergency Remount R/O[ 25原创 2015-07-31 10:54:23 · 1446 阅读 · 0 评论 -
linux编译警告信息
类型1:显示:warning: implicit declaration of function `Example()'。警告原因:(1)在你的.c文件中调用了函数Example(),可是你并没有把声明这个函数的相应的.h文件包含进来。 (2)有可能你在一个.c文件中定义了这个函数体,但并没有在.h中进行声明。解决方法:(1)你可以在调用这种函数的.c文件的一开始处加上:exter原创 2015-07-31 23:08:29 · 1728 阅读 · 0 评论 -
linux 设备模型(二 driver)
#include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");extern struct bus_type my_bus_type;static int my_probe(struct device原创 2015-08-13 23:12:19 · 460 阅读 · 0 评论 -
linux设备模型(四 platform )
#include #include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");static struct platform_device *my_device;static int __init原创 2015-08-13 23:27:19 · 467 阅读 · 0 评论 -
linux Device Drivers platform
何谓platform bus在Linux3.4的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2 C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里原创 2015-07-22 11:08:16 · 656 阅读 · 0 评论 -
linux 设备模型(一 bus)
#include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");static char *Version = "$Revision: 2.0 $";static int my_match(struct原创 2015-08-13 23:09:33 · 507 阅读 · 0 评论 -
linux设备模型(三 device)
#include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");extern struct device my_bus; extern struct bus_type my_bus_type;/*原创 2015-08-13 23:15:17 · 461 阅读 · 0 评论 -
android /linux休眠与唤醒(二)
如何进入休眠1. 当所有wake_lock被释放,自动进入休眠;2. echo mem > /sys/power/state;(也需要等待wake_lock全部释放才能进入suspend);2.2. 休眠主要步骤1. 冻结用户态进程、内核线程;2. 调用注册的设备的suspend回调,其顺序就是按照注册顺序;3. 休眠核心设备、使cpu进入休眠状态(或者关闭--supp原创 2015-08-14 20:01:53 · 3988 阅读 · 0 评论 -
dump data
static void dumphex32(char* name,int len){u32 i; void __iomem *base = __io_address(0x1c0f000);printk("dump %s registers:", name);for (i=0; iif (!(i&0xf))printk("\n0x%p : ", base + i);原创 2015-07-31 10:49:27 · 1066 阅读 · 0 评论 -
android /linux休眠与唤醒(三)
电源管理始终是手机等移动设备最重要的一个功能,尤其对于Android这种智能手机或者说手机电脑化的设备,电源管理更显得十分重要。Linux一直在传统的PC和服务器市场上有很好的应用,也有了比较好的电源管理框架,但是对于智能手机等嵌入式设备来说,Linux标准的电源管理就显得不是很适用了,有许多需要改进的地方。Android在这方面做了一些比较好的尝试,在这里我们将详细的介绍Android系统的电源转载 2015-08-15 20:08:24 · 1037 阅读 · 0 评论 -
android /linux休眠与唤醒(一)
请在休眠前,输入如下串口命令。 echo N > /sys/module/printk/parameters/console_suspend 否则控制台会被挂起,看不到休眠后的打印。 #include #include #include #include #include #include #include #include原创 2015-08-13 09:12:19 · 2316 阅读 · 0 评论 -
linux下GPS编程
定义:利用GPS定位卫星,在全球范围内实时进行定位、导航的系统,称为全球卫星定位系统,简称GPS。GPS是由美国国防部研制建立的一种具有全方位、全天候、全时段、高精度的卫星导航系统,能为全球用户提供低成本、高精度的三维位置、速度和精确定时等导航信息,是卫星通信技术在导航领域的应用典范。定位地理信息3、 本程序主要通过GPS设备获得经度、纬度和高度,只需对该语句$GPGGA进行解析,原创 2015-07-10 21:46:25 · 996 阅读 · 0 评论