随笔分类 - 嵌入式开发——JZ2440/IMX6ULL
我和韦东山老师的相遇
摘要:linux输入子系统(linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EventHandler)、输入子系统核心层(InputCore)和输入子系统设备驱动层。 对于输入子系统设备驱动层而言,主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换
阅读全文
摘要:之前我们的按键程序没有考虑抖动的情况。 按键按下的会有尖峰脉冲,常见的两种消抖方式: 第一:硬件消抖 并联一个电容,利用电容的充放电过程消抖。 第二:软件消抖 一般的用法就是一个延时,在不是us、ns必争的的场合,延时个几毫秒(一般5-10ms)再读取按键值就可以消除抖动了。 韦老师的方法是在按键中
阅读全文
摘要:1. 原子操作 原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic
阅读全文
摘要:为了使设备支持异步通知机制,驱动程序中涉及以下 3 项工作:1. 支持 F_SETOWN 命令,能在这个控制命令处理中设置 filp->f_owner 为对应进程 ID。不过此项工作已由内核完成,设备驱动无须处理。2. 支持 F_SETFL 命令的处理,每当 FASYNC 标志改变时,驱动程序中的
阅读全文
摘要:关于这个韦老师给了一个简单的参考文档: poll机制分析 韦东山 2009.12.10 所有的系统调用,基本都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_wr
阅读全文
摘要:cpu发生中断,跳到异常向量入口执行动作 1.此时需要保存被中断的现场 2.执行中断处理函数 3.恢复被中断的现场 写程序时:先设置异常入口 异常向量入口: 0地址和0xffff0000两个入口, 嵌入式 arm linux中的选择后者为入口 vim .config文件查看中断向量表的起始地址 AR
阅读全文
摘要:总的来说这个驱动和之前的没有太大差别,只是熟悉并复习一下之前的知识,比如裸机的按键查询和前面的first_drv的构建过程: Linux操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制 Code(可看备注回忆知识点): 刚开始
阅读全文
摘要:mdev是busybox提供的一个工具,用在嵌入式系统中,相当于简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时, 自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的。在加载驱动过程中,根据驱动程序,在/dev下自动创建设备节点。 前面的博客实现了第一个版本,但
阅读全文
摘要:要想实现三者互ping,韦老师虽然专门出了视频说明,但是在自己配置过程还是出现了问题,这里记录一下解决办法,虽然我也不知道原因,但是解决了出现的问题也实现了三者互ping。 首先,我的硬件设备是PC通过无线连接wifi路由器,单板通过网线直接和电脑连接。 要实现互相ping,需要把PC主机上的两个网
阅读全文
摘要:根文件系统启动分析 启动根文件系统过程UBOOT:启动内核内核:启动应用程序 Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动应用程序的运行是依赖文件系统的。(所以需要挂接根文件系统) 执行应用程序在“init_post”这个函数中。 第一
阅读全文
摘要:在uboot学习的时候, 我们知道了一个庞大的程序,感觉无从下手,但其实,通过韦老师和一些老手的经验告诉我,如果我们不是专门弄uboot的,一般只用知道怎么用就行了。确实这个东西太大了而且花那么多时间去弄这个也不值得。同理,uboot的终极奥义是启动内核,现在uboot的简单应用我们已经会了,内核是
阅读全文
摘要:之前一直在想,为什么没有人出一个完全从零写uboot和移植剪裁内核的教程,后来发现,确实这样的教程十分不容易,还有就是我们也没有必要花那么多时间去做别人已经做好的事情,所以,一般而言我们只用管怎么实现功能。(把更多的时间给音频、视频、图像类等的算法去更加符合经济效益)。 我们知道uboot的菜单中是
阅读全文
摘要:为什么一来需要把cpu 设置成svc管理模式? usr模式,此模式不可以直接访问板子的硬件资源,而uboot初始化,必须要去访问此类资源,所以不可以设置为usr模式。 svc模式属于特权模式,可以访问所有硬件受控资源。相对于其他的模式,SVC模式可以访问的资源更多。 还有就是: 需要再次说明的是,a
阅读全文
摘要:U-boot的启动一般分为两个阶段,现在我们先将第一阶段。 在此之前,我们先了解一下uboot的目录结构,各个文件夹是什么作用。 如果连各个文件夹是干什么的都不清楚就开始移植剪裁,势必会和我刚拿到开发板时对着uboot一脸懵逼的情景一样。 所以,我们先看uboot文件夹到底包含了哪些内容: Boar
阅读全文
摘要:官方下载地址:ftp://ftp.denx.de/pub/u-boot/ uboot的终极奥义就是启动内核。 但是,现在,我们先做最基本的,去官网下载一个支持自己板子的uboot,然后解压缩,打补丁。 官网的uboot肯定不能对应所有的板子,所有需要根据自己特定的板子打补丁,以满足自己特定cpu的需
阅读全文
摘要:在单片机开发中,我们借助于vsprintf函数,可以自己实现一个printf函数,但是,那是IDE帮我们做了一些事情。 刚开始在ARM9裸机上自己写printf的实现的时候,包含对应头文件也会提示vsprintf函数找不到,查询很多资料之后,发现使用arm-linux-ld就是找不到对应的库函数,换
阅读全文
摘要:s3c2440的异常向量表: IRQ中断地址是0x18.所以,根据之前的异常处理方式,我们编写启动文件: 为什么需要lr减4,可以参考这篇文章:http://blog.csdn.net/zzsfqiuyigui/article/details/23334177 这是为了保证,当cpu正在执行某条指令
阅读全文
摘要:系统复位的时候,从0地址开始执行,这个时候系统处于svc管理模式。 一般而言,我们的app应用程序是处于用户模式的,但是用户模式不能访问硬件,必须处于特权模式才可以。所以这里我们用swi软中断方式来实验。swi异常会让cpu进入svc模式。 首先,系统复位,执行代码,此刻处于svc模式,然后我们切换
阅读全文
摘要:现在做第一个实验,模拟未定义模式。 未定义模式,是cpu遇到自己不能识别的指令时候做出的异常处理。 arm指令的机器码一定是按照某种规范要求的,不然你随意写一条指令,cpu不是都可以执行吗?在cpu没有定义该条指令含义的情况下,我们执行了这样未定义的指令,就会进入未定义异常。 现在我们要模拟一个未定
阅读全文
摘要:之前我们的启动文件清除bss和拷贝都是通过汇编的方式的实现,但是,我们能够使用C语言,就不使用汇编: 先看连接脚本: 现在我们编写C语言的copy和clean函数,但是在我们的c程序中,需要访问连接脚本中的符号。 先看代码,稍后解释: start.S部分展示: 先不管连接脚本的引用,我们现在讨论一个
阅读全文