随笔分类 -  3.linux底层驱动

摘要:内核版本: Linux version 3.10.14 1.由于每次开发板开机的网卡eth0的物理地址都是随机的. 然后在网上找到可以通过命令行实现设置mac物理地址: 然后带着好奇,想看看命令行ifconfig是如何与内核交互的,想试试如何直接通过内核自动设置MAC. 2.分析介绍 因为ifcon 阅读全文
posted @ 2019-01-18 20:04 诺谦 阅读(7362) 评论(1) 推荐(1) 编辑
摘要:本章学习内容: 1.WIFI如何开启 2.扫描热点 3.连接热点 4. 断开热点 5.关闭WIFI 本节使用的是wpa_supplicant工具,它主要包含wpa_supplicant(命令行模式)与wpa_cli(交互模式)两个程序。 1.WIFI如何开启 wpa_supplicant.conf文 阅读全文
posted @ 2018-12-26 17:49 诺谦 阅读(18316) 评论(2) 推荐(3) 编辑
摘要:https://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649329747&idx=1&sn=e4f1c7603467304702bf9ed3e12a8712&chksm=839774d9b4e0fdcfc70b02dbda4682662156c 阅读全文
posted @ 2018-12-26 10:28 诺谦 阅读(205) 评论(0) 推荐(0) 编辑
摘要:1.对双向链表的具体操作如下: 2.字符串相关 内核中经常会有字符串转换的需要, 其接口如下: 示例: 3.另外字符串本身的操作接口如下: 文章来源http://blog.sina.com.cn/s/blog_b2aa4e080102xw25.html 阅读全文
posted @ 2018-12-25 17:07 诺谦 阅读(3830) 评论(0) 推荐(1) 编辑
摘要:在上章学习33.Linux-实现U盘自动挂载(详解)后,只是讲解了普通U盘挂载,并没有涉及到多分区U盘,接下来本章来继续学习 1.多分区U盘和普通U盘区别 1)U盘插上只会创建一个/dev/sda文件,这种一般表示该U盘没有分区,这个sda文件便代表该U盘总大小,我们只需要挂载/dev/sda即可 阅读全文
posted @ 2018-12-12 11:14 诺谦 阅读(2977) 评论(0) 推荐(3) 编辑
摘要:1.介绍 使用DEVICE_ATTR,可以实现驱动在sys目录自动创建文件,我们只需要实现show和store函数即可. 然后在应用层就能通过cat和echo命令来对sys创建出来的文件进行读写驱动设备,实现交互. 2.DEVICE_ATTR()宏定义 DEVICE_ATTR()定义位于includ 阅读全文
posted @ 2018-10-16 18:22 诺谦 阅读(21820) 评论(0) 推荐(5) 编辑
摘要:上章链接:46.Linux-分析rc红外遥控平台驱动框架,修改内核的NEC解码函数BUG(1) 在上章分析了红外platform_driver后,已经修改bug后,接下来我们自己创建一个红外platform_device平台设备,其实写一个平台设备很简单. 创建红外platform_device平台 阅读全文
posted @ 2018-10-13 19:49 诺谦 阅读(3370) 评论(14) 推荐(3) 编辑
摘要:内核版本 : Linux 3.10.14 rc红外接收类型: GPIO 类型的NEC红外编码 本章内容 1) rc体系结构分析 2) 分析红外platform_driver平台驱动框架 3) 分析内核自带的NEC红外解码过程 4) 修改内核自带的NEC红外解码BUG,实现按键重复按下 下章内容 1) 阅读全文
posted @ 2018-10-13 18:13 诺谦 阅读(5335) 评论(0) 推荐(1) 编辑
摘要:1.休眠方式 在内核中,休眠方式有很多种,可以通过下面命令查看 # cat /sys/power/state //来得到内核支持哪几种休眠方式. 常用的休眠方式有freeze,standby, mem, disk freeze: 冻结I/O设备,将它们置于低功耗状态,使处理器进入空闲状态,唤醒最快, 阅读全文
posted @ 2018-09-11 19:09 诺谦 阅读(30396) 评论(0) 推荐(8) 编辑
摘要:介绍 在中断处理中,经常用到工作队列,这样便能缩短中断处理时的时间 中断中通过调用schedule_work(work)来通知内核线程,然后中断结束后,再去继续执行work对应的func函数 示例 当中断来了,立马调用schedule_work(work),然后退出. 中断结束后,内核便会调用_wo 阅读全文
posted @ 2018-09-11 18:04 诺谦 阅读(5914) 评论(0) 推荐(1) 编辑
摘要:由于板子LCD旧屏是ili9335型号的,旧屏有时候会断货,如果断货则使用一个st7789v型号的LCD 它们两个屏的区别在于初始化屏的参数不同,引脚都一样,也就是说需要使板子同时支持ili9335型号和st7789v型号 思路: 1.uboot在显示LOG(初始化屏参数)之前,通过命令来读LCD型 阅读全文
posted @ 2018-08-09 19:22 诺谦 阅读(7285) 评论(2) 推荐(0) 编辑
摘要:当产品要发布之前,都会进行反复的测试输入,比如:测试按键,遥控,触摸等等. 当出现bug时,就还需要不停地找规律,修改程序,直到修复成功,会显的非常麻烦 答: 可以通过之前在35.Linux-分析并制作环形缓冲区里学的,使用myprintf()保存到环形缓冲区. 当出错时,直接可以通过缓冲区里的数据 阅读全文
posted @ 2017-12-22 15:40 诺谦 阅读(1145) 评论(3) 推荐(2) 编辑
摘要:1首先来讲讲应用程序如何实现系统调用(用户态->内核态)? 我们以应用程序的write()函数为例: 1)首先用户态的write()函数会进入glibc库,里面会将write()转换为swi(Software Interrupt)指令,从而产生软件中断,swi指令如下所示: 2)然后CPU会跳到异常 阅读全文
posted @ 2017-12-20 18:35 诺谦 阅读(2605) 评论(1) 推荐(4) 编辑
摘要:1.在之前第36章里,我们学习了通过驱动的oops定位错误代码行 第36章的oops代码如下所示: 1.1那为什么在上一章,我们用错误的应用程序,却没有打印oops,如下图所示: 接下来,我们便来配置内核,从而打印应用程序的oops 2.首先来搜索oops里的:Unable to handle ke 阅读全文
posted @ 2017-12-15 23:14 诺谦 阅读(3088) 评论(0) 推荐(1) 编辑
摘要:1.gdb和gdbserver调试原理 通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能 和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本 阅读全文
posted @ 2017-12-13 18:07 诺谦 阅读(3000) 评论(0) 推荐(2) 编辑
摘要:1.strace简介 strace常用来跟踪进程执行时的系统调用和所接收的信号。通过strace可以知道应用程序打开了哪些文件,以及读写了什么内容,包括消耗的时间以及返回值等 2.安装strace命令 首先需要以下两个文件: strace-4.5.15.tar.bz2 strace-fix-arm- 阅读全文
posted @ 2017-12-13 17:31 诺谦 阅读(1883) 评论(0) 推荐(0) 编辑
摘要:当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的? 答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便在中断函数中打印该进程的信息 1.先来回忆下 在之前的第5章内核中断运行过程:http://www. 阅读全文
posted @ 2017-12-11 18:16 诺谦 阅读(1718) 评论(0) 推荐(0) 编辑
摘要:上章链接入口: http://www.cnblogs.com/lifexy/p/8006748.html 在上章里,我们分析了oops的PC值在哪个函数出错的 本章便通过栈信息来分析函数调用过程 1.上章的oops栈信息如下图所示: 9fe0: 代表最初的栈顶SP寄存器位置 9e80:代表函数出错的 阅读全文
posted @ 2017-12-09 16:53 诺谦 阅读(3070) 评论(0) 推荐(2) 编辑
摘要:1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2然后编译装载26th_segmentfault并执行测试程序后,内核便打印了oops出来,如下图所示 阅读全文
posted @ 2017-12-08 18:49 诺谦 阅读(5677) 评论(0) 推荐(2) 编辑
摘要:在上章34.Linux-printk分析、使用printk调试驱动里讲述了: printk()会将打印信息存在内核的环形缓冲区log_buf[]里, 可以通过dmesg命令来查看log_buf[] 1.环形缓冲区log_buf[]又是存在内核的哪个文件呢? 位于/proc/kmsg里,所以除了dme 阅读全文
posted @ 2017-12-07 18:38 诺谦 阅读(7298) 评论(1) 推荐(2) 编辑