03 2018 档案

32、应用调试之编写输入模拟器
摘要:1. 产品要经过测试才能发布,一般都是人工操作,比如手机触摸屏、遥控器2. 操作过程中发现错误,要再次复现,找到规律,修改程序3. 能否在驱动程序里把所有的操作记录下来,存为文件 当出错时,可以通过文件里的数据来"复现"输入 input_event上报的时候保存数据 1、使用之前仿照printk写的 阅读全文

posted @ 2018-03-31 13:50 拉风摊主 阅读(135) 评论(0) 推荐(0) 编辑

30、应用调试之配置内核输出应用程序的段错误信息
摘要:应用程序在执行的时候,如果驱动程序出现问题,会打印oops或者堆栈分析信息,也是是从在内核态下会打印错信息,而如果应用程序本身有问题,其执行时在用户态,只会提示段错误信息,这时候需要修改内核,让其支持应用出错时打印更多信息,根据oops信息搜索“”“Unable to handle kernel ” 阅读全文

posted @ 2018-03-31 13:47 拉风摊主 阅读(358) 评论(0) 推荐(0) 编辑

31、应用调试之自制系统调用、编写进程查看器
摘要:应用程序调用的read、open这些函数是glibc实现的,在调用的时候从用户态切换为内核态,其实质就是执行一条swi指令,并带有一个value,swi指令执行的时候会产生一个异常,CPU会跳到异常处理函数(vector_swi)去执行,会根据导致异常的指令里面的value调用对应的函数,比如sys 阅读全文

posted @ 2018-03-31 13:47 拉风摊主 阅读(166) 评论(0) 推荐(0) 编辑

29、应用调试之使用GDB来调试应用程序
摘要:说明:gdb可以实现源代码单步调试 原理: 1、gdb在PC机上运行,gdbserver在arm开发板上运行,gdbserver在开发板上相当于父进程,应用相当于子进程,PC上gdb发命令给gdbserver,gdbserver在发命令给应用子进程 2、gdb在运行的时候需要一个带有调试信息的app 阅读全文

posted @ 2018-03-31 13:46 拉风摊主 阅读(189) 评论(0) 推荐(0) 编辑

28、应用调试之strace命令来跟踪系统调用
摘要:strace是个工具,在使用时需要先按照,见韦东山书籍: 1、tar xjf starce-4.5.15.tar.bz2 2、cd strace-4.5.15/ 3、patch -p1 < ../strace-fix-arm-bad-syscall.patch 4、./configure --hos 阅读全文

posted @ 2018-03-31 13:44 拉风摊主 阅读(497) 评论(0) 推荐(0) 编辑

27、驱动调试之修改系统时钟中断定位系统僵死问题
摘要:该调试方法用于处理运行驱动的时候系统进入僵死状态,即无反应了,也不能输出信息 利用每时每刻系统时钟都会尝试中断的原理来处理,在该中断函数中加入打印一些信息保存信息来定位僵死的原因(中断发生的时候会保存现场,找到现场就知道僵死的函数地址) (2.6的内核中断总入口函数是asm_do_IRQ(),其形参 阅读全文

posted @ 2018-03-30 20:21 拉风摊主 阅读(224) 评论(0) 推荐(0) 编辑

25、驱动调试之打印到proc虚拟文件
摘要:1、dmesg指令是通过读/proc/kmsg来获取打印信息,也可以通过cat /proc/kmsg打印; 说明:kmsg是环形缓存区,只能读一次 2、内核中fs/proc目录下有相关文件,比如proc_misc.c,在入口函数中可以看到(4.3.2内核改到kmsg.c文件中) #ifdef CIN 阅读全文

posted @ 2018-03-30 20:19 拉风摊主 阅读(280) 评论(0) 推荐(0) 编辑

26、驱动调试之根据oops信息和堆栈确定出错的代码
摘要:a.驱动作为模块:1. 根据pc值确定该指令属于内核还是外加的模块pc=0xbf000018 它属于什么的地址?是内核还是通过insmod加载的驱动程序?先判断是否属于内核的地址: 看System.map确定内核的函数的地址范围:c0004000~c03265a4 <System.map文件在内核m 阅读全文

posted @ 2018-03-30 20:19 拉风摊主 阅读(420) 评论(0) 推荐(0) 编辑

24、驱动调试之printk
摘要:1、uboot跳转到内核启动的时候通过环境变量 console设置控制台 (console = ttySAC0表示输出到串口,并从串口结束输入,也可以设置console=tty1,表示输出到LCD,从inputevent接受输入事件) 2、内核用printk打印,printk肯定要调用硬件函数,其通 阅读全文

posted @ 2018-03-30 20:18 拉风摊主 阅读(297) 评论(0) 推荐(0) 编辑

23、uevent/hotplug热拔插机制
摘要:(class_device_create的目的是为了让mdev根据它注册的信息来创建设备节点) class_device_create class_device_register class_device_add kobject_uevent(&class_dev->kobj, KOBJ_ADD); 阅读全文

posted @ 2018-03-28 23:17 拉风摊主 阅读(210) 评论(0) 推荐(0) 编辑

22、DMA驱动程序框架
摘要:一、使用DMA的优点及DMA支持的请求源(请求源是启动DMA传输的事件,可以认为是触发。它可以是软件,也可以是中断,或者外部事件) 1、DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CPU的工作效率。 3、S3C2440有四个DMA,每个DMA支持的工作方式基本相同,但支持的DMA请求 阅读全文

posted @ 2018-03-28 21:21 拉风摊主 阅读(364) 评论(0) 推荐(0) 编辑

21、IIS声卡驱动程序
摘要:声卡芯片的数据通道一般都是IIS接口,但是控制音量等控制信息的接口都不相同 (新内核在linux-3.4.2\sound\soc\codecs\uda134x.c) uda134x_codec_probe snd_soc_register_codec snd_soc_register_dais sn 阅读全文

posted @ 2018-03-27 21:37 拉风摊主 阅读(316) 评论(0) 推荐(0) 编辑

20、RTC驱动程序
摘要:drivers\rtc\rtc-s3c.c s3c_rtc_init platform_driver_register s3c_rtc_probe rtc_device_register("s3c", &pdev->dev, &s3c_rtcops, THIS_MODULE) rtc_dev_pre 阅读全文

posted @ 2018-03-26 23:40 拉风摊主 阅读(196) 评论(0) 推荐(0) 编辑

19、2.6之后的内核字符设备驱动程序
摘要: 阅读全文

posted @ 2018-03-26 23:25 拉风摊主 阅读(128) 评论(0) 推荐(0) 编辑

18.1 IIC驱动程序(基于3.4.2内核)
摘要:驱动使用smbus提供的IIC读写函数可以参考smbus-protocol.txt文档;应用层直接使用IIC读写函数读写IIC设备,应用层读写函数是由i2c-tools这个库提供的(编译的使用和应用程序放在同一目录就可以了),这个库调用的底层实际上是有驱动中i2c-dev.c提供的open、ioct 阅读全文

posted @ 2018-03-24 22:51 拉风摊主 阅读(339) 评论(0) 推荐(0) 编辑

18、IIC总线驱动程序
摘要:i2c_s3c2410.c是内核自带dev层(adapt)驱动程序,知道怎么发收数据,不知道含义 在与i2c_s3c2410.c(在其probe函数中的s3c24xx_i2c_init函数会初始化iic控制器)上层目录中chip目录下则是各个驱动程序,就是IIC总线框架的driver层 i2c_ad 阅读全文

posted @ 2018-03-23 23:49 拉风摊主 阅读(352) 评论(0) 推荐(0) 编辑

17、网卡驱动程序-DM9000举例
摘要:(参考:cs89x0.c可以参考) DM9000 芯片实现网络功能的基础,在接收数据时采用中断方式,即当有数据到来并在 DM9000 内部 CRC 校验通过后会产生一个接收中断; 网卡驱动程序框架: app: socket 若干层网络协议--纯软件 hard_start_xmit(解析sk_buff 阅读全文

posted @ 2018-03-21 21:45 拉风摊主 阅读(470) 评论(0) 推荐(0) 编辑

16、NOR FLASH驱动框架
摘要:mtdram.c是内核自带用内存模拟nor flash程序 physmap.c是内核自带nor flash驱动程序最底层硬件相关层代码 其关键代码是:1、分配一个map_info结构体 2、设置map_info结构体物理地址、size、位宽、虚拟地址 3、调用内核提供的do_map_probe函数, 阅读全文

posted @ 2018-03-20 21:53 拉风摊主 阅读(242) 评论(0) 推荐(0) 编辑

15.1 linux操作系统下nand flash驱动框架2
摘要:当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备。 而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。 框架如下: 1.即使na 阅读全文

posted @ 2018-03-20 17:40 拉风摊主 阅读(221) 评论(0) 推荐(0) 编辑

15、NAND FLASH驱动程序框架
摘要:驱动可以参考At91_nand.c,这个比S3c2410.c (drivers\mtd\nand)简单多了 NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地址?答1.在D 阅读全文

posted @ 2018-03-18 23:37 拉风摊主 阅读(301) 评论(0) 推荐(0) 编辑

14、块设备驱动程序框架分析
摘要:(对于需要使用块设备驱动程序框架的设备,比如磁盘,假如一个操作需要读写读三个不同扇区,这个时候如果采用字符驱动程序来读写,对于机械磁盘的磁头需要跳来跳去执行,这样时间会花费很长) (比如nand flash产品,在写多个字节的时候,先读整块到buffer,修改buffer中的扇区(即页),在擦除整块 阅读全文

posted @ 2018-03-18 18:32 拉风摊主 阅读(456) 评论(0) 推荐(0) 编辑

12.2 linux USB框架分析(详细注册match匹配过程)
摘要:首先我们先来简单说一说USB的框架,之后在来具体分析源码,以便加深理解!其实USB的框架比较像“平台总线、设备、驱动”的框架,也分为总线、设备、驱动三大块。其中总线驱动是已经由内核完成的,一旦接入usb设备,总线驱动程序就会找到能处理该设备的驱动进行处理!我们进入文件系统的/sys/bus目录下可以 阅读全文

posted @ 2018-03-18 13:58 拉风摊主 阅读(1816) 评论(0) 推荐(0) 编辑

arm-linux-gcc: Command not found
摘要:老是提示arm-linux-gcc找不到,但是确实是装好了,其实是权限的问题,Ubuntu没有root权限,刚开始用碰到很多麻烦,查了好多资料,终于把arm-linux-gcc: Command not found 的问题解决了。 问题: sudo tar jxvf cross-2.95.3.tar 阅读全文

posted @ 2018-03-17 18:48 拉风摊主 阅读(2037) 评论(2) 推荐(0) 编辑

12、USB设备驱动程序
摘要:linux-3.4.2\driver\hid\usbhid\usbmouse.c 内核只带USB驱动程序 (hub和usb是两个不同的设备,hub在内核上电的过程中在usb_hub_init函数中调用usb_register来注册,usb驱动才是我们自己写的驱动,也是用usb_register来注册 阅读全文

posted @ 2018-03-17 12:12 拉风摊主 阅读(511) 评论(0) 推荐(1) 编辑

12.1、USB驱动——描述符、URB、管道
摘要:大家常说,一个设备通常有多个配置,配置通常有多个接口,接口通常有多个端点。接口代表逻辑上的设备,比如声卡分为 录音和播放。访问设备时,访问的是某个接口(逻辑设备)。除了端点0之外,每个端点只支持一个传输方向,一种性质的传输传输数据时,读写某个端点,端点是数据通道。 有一个设备,如支持视频和音频的一个 阅读全文

posted @ 2018-03-17 11:09 拉风摊主 阅读(1068) 评论(0) 推荐(0) 编辑

13、触摸屏驱动程序
摘要:linux-3.4.2\drivers\input\touchscreen\s3c2410_ts.c(内核只带驱动) 触摸屏是有2440芯片中ADC控制器控制的,ADC有四种工作模式: 1、普通转换模式用于ADC转换; 2和3、用于触摸屏测试模式; 4、等待触摸笔按下模式 测试2th~7th:1. 阅读全文

posted @ 2018-03-15 23:11 拉风摊主 阅读(373) 评论(0) 推荐(0) 编辑

0、驱动及应用小技巧、uboot指令及环境变量配置、linux常用命令
摘要:(内核make menuconfig之后,通过insmod安装的驱动都应该重新make,可能会出现一些莫名的问题) (nor flash/SDRAM/DM9000都受内存控制器控制,需要配置内存控制器对应的位宽,表示一次能取得多少字节数据;norflash在接开发板时,地址线错开一位的原因就是因为当 阅读全文

posted @ 2018-03-14 23:08 拉风摊主 阅读(164) 评论(0) 推荐(0) 编辑

11、DMA操作说明
摘要:先理解cache的作用CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容;否则,就 称为“ 不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由 阅读全文

posted @ 2018-03-14 22:40 拉风摊主 阅读(731) 评论(0) 推荐(0) 编辑

10、分离分层
摘要:1、bus虚拟总线 2440中在mach_smdk2440.c中,通过smdk2440_machine_init会把很多device都注册了,这样driver层在注册的时候就可以调用probe函数了 2、在mach_xxxxx.c这个架构相关函数中,在他的init函数中会通过platform_add 阅读全文

posted @ 2018-03-14 21:43 拉风摊主 阅读(179) 评论(0) 推荐(0) 编辑

9、LCD驱动程序框架
摘要:linux-3.4.2\drivers\video\S3C2410fb.c(内核自带驱动程序) fbmem.c是LCD驱动程序顶层框架文件,是一个通用的文件,在初始化init函数中会注册一个字符设备,并创建一个类,在注册字符设备的时候提供的file_operations是一个中间件,根据次设备号在r 阅读全文

posted @ 2018-03-14 19:50 拉风摊主 阅读(344) 评论(0) 推荐(0) 编辑

8、linux下输入子系统
摘要:input_sync(button_dev); /*通知接收者,一个报告发送完毕*/ 参考:http://www.51hei.com/bbs/dpj-27652-1.html 很详细说明 input.c是输入子系统驱动程序顶层框架文件,是一个通用的文件 在connect函数中 for (minor 阅读全文

posted @ 2018-03-12 23:03 拉风摊主 阅读(195) 评论(0) 推荐(0) 编辑

7、linux系统2440开发板域名解析问题
摘要:如果在linux系统中ping某一台电脑的ip地址可以ping 通: ~ >: ping 192.168.1.3PING 192.168.1.3 (192.168.1.3): 56 data bytes64 bytes from 192.168.1.3: seq=0 ttl=64 time=2.51 阅读全文

posted @ 2018-03-11 22:20 拉风摊主 阅读(230) 评论(0) 推荐(0) 编辑

7、linux之定时器
摘要:(1) 一个timer_list 结构体的实例对应一个定时器,其定义如下: struct timer_list { struct list_head entry, /*定时器列表*/ unsigned long expires, /*定时器到期时间*/ void (*function) (unsig 阅读全文

posted @ 2018-03-11 22:18 拉风摊主 阅读(147) 评论(0) 推荐(0) 编辑

6、linux中同步、互斥、阻塞(原子操作、信号量、阻塞)
摘要:1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_ 阅读全文

posted @ 2018-03-11 18:53 拉风摊主 阅读(173) 评论(0) 推荐(0) 编辑

5、异步通知机制
摘要:异步通知,的确是一种很好处理机制,熟练掌握这种手段,对我们写高质量的应用程序很有帮助。下面说说对它的理解: 异步通知,就是让驱动去告诉应用,底层硬件发生了什么事,而不是应用主动地去查询驱动,这对系统的性能有一个很大的提升。 首先,在驱动中 内核首先定义一个结构体struct fasync_struc 阅读全文

posted @ 2018-03-11 16:51 拉风摊主 阅读(314) 评论(0) 推荐(0) 编辑

1、第一课 register_chrdev和register_chrdev_region 创建知识
摘要:1. register_chrdev注册字符设备后,有0-256个子设备可用,若major==0,则内核动态申请主设备号。static inline int register_chrdev(unsigned int major, const char *name, const struct file 阅读全文

posted @ 2018-03-11 16:48 拉风摊主 阅读(304) 评论(0) 推荐(1) 编辑

4、linux开发中常用指令
摘要:1、cat /proc/device 可以查看各个全部字符设备和块设备,在register_chrdev中设置的名字在打印出来的信息中可以看到;2、top 可以看各个应用程序占用CPU量及PID等信息3、kill PID 杀死进程4、./应用程序名字 & 后台运行 5、cat /proc/inter 阅读全文

posted @ 2018-03-11 15:48 拉风摊主 阅读(142) 评论(0) 推荐(0) 编辑

3、Pycharm使用
摘要:1、设置文件模板 file->settings->Editor->File and Code Templates->Python Script 2、运行 a.点击要运行的文件,右键 run b.view->toolbar 选中要执行的文件 点击-运行 c、在当前文件空白处,右键,run 3、修改当前 阅读全文

posted @ 2018-03-11 15:44 拉风摊主 阅读(158) 评论(0) 推荐(0) 编辑

3、应用层常用lib函数使用说明
摘要:1、mmap函数 void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset); start:映射区的开始地址,设置为0时表示由系统决定映射区的起始地址。 length:映射区的长度。//长度单位是 以字节为 阅读全文

posted @ 2018-03-11 15:43 拉风摊主 阅读(231) 评论(0) 推荐(0) 编辑

2、应用程序及驱动-poll和select使用说明
摘要:1、poll机制(如果中断机制出问题了,poll机制是对中断机制的补充,比如等一个小孩,如果小孩生病了,因此隔一段时间应该去找他) poll机制就是给定一段时间,在这一段时间内程序处于睡眠状态一直等待某一个资源,它会在两种情况下返回①时间到了②等到了资源。驱动程序的实现并不复杂,但原理有待分析。首先 阅读全文

posted @ 2018-03-11 15:42 拉风摊主 阅读(309) 评论(0) 推荐(0) 编辑

2、HZK和FreeType的使用
摘要:HZK16汉字库的使用 定义如下: unsigned char str[]="我" 在运行时str被初始化为2个字节长度,内容为“我”的GBK码,为:0xCE(区码),0xD2(位码)。 使用如下换算公式得到 “我”在HZK16文件中的地址,从该位置开始的顺序32字节为“我”的字模。 ADD=【(区 阅读全文

posted @ 2018-03-09 15:31 拉风摊主 阅读(1447) 评论(0) 推荐(0) 编辑

1、电子书显示
摘要:1、 文字编码方式 源文件用不同的编码方式编写,会导致执行结果不一样。 怎么解决?编译程序时,要指定字符集 man gcc , /charset -finput-charset=charset 表示源文件的编码方式, 默认以UTF-8来解析 -fexec-charset=charset 表示可执行程 阅读全文

posted @ 2018-03-09 11:25 拉风摊主 阅读(271) 评论(0) 推荐(0) 编辑

加密货币的本质
摘要:去年,比特币暴涨,其他币也像雨后春笋一样冒出来,已经有1000多种了。 很多人都在问,加密货币(cryptocurrency)的时代,真的来临了吗?将来会不会人类不再使用美元、人民币,改用加密货币?那么多品种,我应该使用哪一种币?要不要现在就去投资一些? 这些问题的答案,我也想知道,就花了很多时间查 阅读全文

posted @ 2018-03-08 11:31 拉风摊主 阅读(94) 评论(0) 推荐(0) 编辑

区块链入门教程
摘要:(http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html) 区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。 可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。 下面, 阅读全文

posted @ 2018-03-08 11:25 拉风摊主 阅读(149) 评论(0) 推荐(0) 编辑

比特币入门教程
摘要:比特币(bitcoin)诞生于2008年的一篇论文。 一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背后没有任何资产支持,也没有任何人负责,你把它当作钱付给对方,怎么会有人愿意接受? 但是,狂想居然变成了现实。随后的几年,在全世界 阅读全文

posted @ 2018-03-08 11:25 拉风摊主 阅读(342) 评论(0) 推荐(0) 编辑

VIM使用说明
摘要:【vim 命令-移动光标】:h 的鍵位于左邊,每次按下就會向左移動。l 的鍵位于右邊,每次按下就會向右移動。j 鍵看起來很象一支尖端方向朝下的箭頭。k朝上移动。 【vim 命令-启动和退出】:1. 請按<ESC>鍵(這是為了確保您處在正常模式)。2.:q! <回車>不保存退出。3.:wq <回車>保 阅读全文

posted @ 2018-03-08 10:01 拉风摊主 阅读(157) 评论(0) 推荐(0) 编辑

2、Python基本数据类型
摘要:1、算数运算: 2、比较运算: 3、赋值运算: 4、逻辑运算: 5、成员运算: 基本数据类型 1、数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647 在64位系统上,整数的位数为64位,取值范围为-2**6 阅读全文

posted @ 2018-03-07 21:45 拉风摊主 阅读(115) 评论(0) 推荐(0) 编辑

1、初识python
摘要:1、linux下运行python脚本时,在第一行通过“#!/usr/bin/env python”指定python h.py <=> ./h.py 具有相同的效果 (h.py需要有执行权限) 2、pyc 文件 执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其 阅读全文

posted @ 2018-03-07 21:28 拉风摊主 阅读(113) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示