linux学习
不当大白菜
这个作者很懒,什么都没留下…
展开
-
【linux学习笔记】Linux内核学习经验总结
转载了大佬的文章,文章对我这种菜鸟来讲启发很大原文链接:http://blog.chinaunix.net/uid-24669930-id-4039377.html侵删:yaoxitong123@hotmail.com开篇学习内核,每个人都有自己的学习方法,仁者见仁智者见智。以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下。内核学习,一偏之见;疏...转载 2020-02-17 18:37:41 · 267 阅读 · 0 评论 -
【linux学习笔记】SPI驱动
本部分是本人学习linux的学习笔记,本人系菜鸟一枚,如有错误欢迎指正。个人邮箱:yaoxitong123@hotmail.comSPI特点:全双工,速度高,4个pin以SPI总线为代表,I2C、USB在驱动设计的时候都采用了分隔的思想(注意区分分层思想):举个例子L138,它有一个ARM核和一个DSP核,如果此时外设有3个设备为SPI总线,那么理论上需要的驱动数量有6个(2*3);但实际...原创 2020-02-13 15:56:48 · 553 阅读 · 0 评论 -
【linux学习笔记】非阻塞IO轮询(也叫IO复用)
一. 非阻塞操作非阻塞操作的进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。这就是我们常说的“轮询”。这是一种比较浪费CPU的方式。但是可以通过信号等方式以异步的形式提高CPU的利用率。使用非阻塞I/O 的应用程序可借助轮询函数来查询设备是否能立即被访问,用户空间调用select()、poll()和epoll()接口,设备驱动提供poll()函数。设备驱动...原创 2020-02-10 19:39:14 · 903 阅读 · 0 评论 -
【linux学习笔记】中断上下文
中断是我们的老朋友了,在裸机开发中中断处于不可或缺的地位。在linux开发中,也有一套自己的中断体系。与裸机开发最大的不同是,操作系统通常将中断划分为了上下文。比如上文处理硬件请求,而下文则对数据进行处理,网卡是一个典型的例子。中断上文相关函数接口申请一个中断:int request_irq(unsigned int irq, irqreturn_t (*handler)(int...原创 2020-02-04 14:02:10 · 359 阅读 · 0 评论 -
【ARM学习笔记】ARM中断嵌套模式理解
之前一直是做DSP,DSP上有中断嵌套,为了保证在多中断的情况下终端不丢失,在读取完硬件数据后会重新开启中断。因此想当然的以为ARM架构也存在这样一种根据优先级的抢占机制。但是事实上不是的,ARM架构中只有FIQ模式才能打断IRQ中断模式。而内核中,为了防止中断丢失直接在SVC模式下执行中断服务程序。以下是来自韦东山老师的一盘文章:几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理...原创 2020-02-04 14:01:53 · 858 阅读 · 1 评论 -
【linux学习笔记】内核同步
临界区就是访问、操作共享资源的代码段。为什么需要进行同步?是因为存在任务的抢占和重新调度,或者多核处理器的并发导致多个进程可以同时进入临界区修改共享资源。可能造成并发的原因:1)中断;2)软中断和tasklet,内核可以在任何时候环形或者调度软中断和tasklet打断当前正在执行的代码;3)内核抢占;4)进程进入睡眠状态;5)多个处理器同时执行代码。同步过程中常见的几个BUG:...原创 2020-02-03 18:40:17 · 131 阅读 · 0 评论 -
【linux学习笔记】Nandflash驱动程序实现
nandflash裸机原理分析常见的flash芯片如nand和nor。后者比较“高级”,有数据线和地址线,一般支持内存一样的数据读取,写数据时需要按照datasheet发送命令代码,数据较前者稳定,可擦除次数少,编程速度较前者满;前者则是“皮实耐操”的典型代表,无数据线、地址线,数据、命令、地址都从IO口输入、输出,因此想要读写nand,必须要通过IO口,拉高/拉低一系列引脚,如ALE(addr...原创 2020-01-31 23:27:09 · 599 阅读 · 0 评论 -
自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析
转自:http://blog.csdn.net/wh_19910525/article/details/11536279自旋锁的初衷:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。单处理器的自旋锁:首先,自旋锁的目的如果在系统不支持内核抢占时,自旋...转载 2020-01-30 15:04:32 · 208 阅读 · 0 评论 -
【linux学习笔记】linux块驱动设备基本框架探索及尝试
在此首先对比一下之前经常打交道的字符型驱动设备。二者的区别主要可以概括为支不支持随机访问,字符驱动设备如键盘,执行读命令只能获取一个按照顺序的字符流,如“linux”,对这个字符流随机的访问是没有意义的;但是块驱动设备最大的不同是,它可以支持用户程序随机的访问,比如访问nandflash的某个扇区等操作。写一个字符型驱动涉笔的大致套路就是,首先确定该字符型驱动设备的设备号,随后,在这个设备号下,...原创 2020-01-29 22:45:47 · 193 阅读 · 0 评论 -
kmalloc()、kzalloc()、vmalloc()对比
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的使用以...转载 2020-01-29 22:34:55 · 241 阅读 · 0 评论 -
【linux学习笔记】内存管理
页(page)内存管理的基本单位。这和体系结构中MMU有关。32位的体系结构支持4K的页。struct page用于管理一个物理页,表示这个页是不是“脏”、被引用的次数、映射的虚拟地址等信息。区(zone)内核采用区对页进行分组。主要是解决以下两个问题:1.一些硬件只能采用特定的内存执行DMA操作。2.一些体系结构的物理内存寻址范围大于虚拟内存的寻址范围,所以并不是所有的页都能映射到...原创 2020-02-13 17:19:56 · 218 阅读 · 1 评论 -
如何实现LCD显示摄像头图像(2)
上图是LCD显示摄像头图像的原理,上部分完成了摄像头参数的设置以及数据的读取。这部分要做的是采集到摄像头图像之后的图像转换问题。摄像头采集的图像可能是YUV格式,也可能是MJPEG格式,统一的需要转化成RGB格式。因此需要实现的是convert文件夹下convert_manager.c、yuv2rgb.c、mjpeg2rgb.c、rgb2rgb.c文件,以及头文件。实现convert_mana...原创 2020-01-13 15:16:40 · 1033 阅读 · 0 评论 -
实时系统与非实时系统的区别
嵌入式操作系统分为实时系统和非实时系统两类,常见的实时系统有:ThreadX、FreeRTOS、ucOS;常见的非实时系统有:windows、linux、Android。两类操作系统的主要区别在于任务调度处理方式不同,常用的任务调度方式有两种:基于任务优先级的任务调度方式和基于时间片的任务调度方式。基于任务优先级的调度方式:一旦内核把资源分配给某进程后,便让该进程一直执行,直到该进程完成或...转载 2020-01-12 15:40:24 · 3876 阅读 · 0 评论 -
如何实现LCD显示摄像头图像(1)
摄像头数据的读出首先需要将摄像头采集到的数据读出,那么就需要摄像头采集到数据的基本格式以及相关操作函数:typedef struct VideoDevice { int iFd; int iPixelFormat; int iWidth; int iHeight; int iVideoBufCnt; int iVideoBufMaxLen; ...原创 2020-01-11 11:22:01 · 948 阅读 · 0 评论 -
USB摄像头驱动程序分析
uvc驱动程序主要位于3.42内核\drivers\media\video\uvc文件夹中。由于本身十分复杂,在此只做简单分析。这幅图来源于UVC的规格书。可以看到一个完整的UVC设备主要分为两个部分:通过VideoControl Interface来控制,通过VideoStreaming Interface来读视频数据,VC里含有多个Unit/Terminal等功能模块,可以通过访问这些...原创 2020-01-10 20:05:39 · 709 阅读 · 0 评论 -
一小时学会网络编程
网络通讯数据传输三要素:源、目的、长度服务器:被动的相应请求。客户端:主动的发起请求。UDP和TCP:UDP传输,如传输视频,某一帧数据丢失关系也不大,是无连接的传输;但是TCP主要是传输文件或者控制命令这些每一帧都很重要的信息,是可靠的有连接的传输。TCP文件读写:fd=open(“文件名”);read(fd,buf,len);write(fd,buf,len);服务...原创 2019-12-30 23:34:55 · 203 阅读 · 0 评论 -
多线程实现电子相框输入
多线程输入基本框架初始化时,创建子线程;主线程调用休眠函数进入休眠状态,等待被子线程唤醒;子线程中,分别调用各个设备的事件函数,随即各个子线程进入休眠状态;当输入事件发生的时候,唤醒子线程,子线程唤醒主线程;在主线程中对事件进行处理。在原先实现查询方式的工程中修改:input_manager.c中:创建主线程休眠函数,有之前程序的事件处理函数修改;初始化函数中创建子线程;创建子线程函...原创 2019-12-26 10:16:48 · 94 阅读 · 0 评论 -
采用select的方式实现多输入
在上一篇博客中,我才用了轮询的方法实现LCD文本的多输入控制。主程序如下:while (1) { if (0 == GetInputEvent(&tInputEvent)) { if (tInputEvent.iVal == INPUT_VAL_DOWN) { ShowNextPage(); } else if (tInputEvent.iVal...原创 2019-12-23 19:05:31 · 236 阅读 · 0 评论 -
在linux3.4.2内核配置freetype
在PC上配置环境将freetype移动到/user/local/目录下。sudo tar -xjf freetype-2.4.10.tar.bz2sudo mv freetype-2.4.10 freetype-2.4.10_pccd freetype-2.4.10_pc/./configure //配置mak...原创 2019-12-19 23:37:59 · 520 阅读 · 0 评论 -
移植触摸屏驱动程序
tslib是什么:Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。一、实验环境硬件: JZ2440开发板内核版本: Linux-3.4.2交叉工具链:arm-linux-gcc-4.3.2tslib版本: tslib-1.4二、安装解压文件。tar xzf tslib-1.4.t...原创 2019-12-19 18:56:00 · 298 阅读 · 0 评论