Linux
文章平均质量分 68
河边一枝花
这个作者很懒,什么都没留下…
展开
-
RK3288 Uboot Display 驱动详解
怀揣着十几个疑问整理了rk3288 uboot 阶段display相关代码:1、代码流程由rk3288 uboot 启动流程分析可知,dispaly 驱动在board_fbt_preboot;中被调用,如下所示:#ifdef CONFIG_LCD /* logo state defautl init = 0 */ g_logo_on_state = 0; if (gd->fdt_blob) { int node = fdt_path_offset(gd->fdt_blob, "/原创 2021-02-26 20:24:51 · 2725 阅读 · 1 评论 -
RK3288 Uboot启动流程分析
Uboot的启动过程大同小异,rk3288的uboot启动也是分为两个过程:uboot的启动由arch/arm/cpu/armv7/start.S 开始,调用了_main,而_main 的实现是在arch/arm/lib/crt0.S中完成,在_main中主要完成以下几个任务:1、为调用board_init_f 设置初始环境,这个环境起始就是提供了一个堆栈和一个存储GD结构体的地方。2、调用board_init_f。在这里会初始化串口、timer、计算重定位的位置等。3、调用relocate_cod原创 2021-02-23 18:33:19 · 2297 阅读 · 0 评论 -
Linux内核completion机制
我们可以在内核中创建很多线程了,但是这些线程之间怎么互动呢?完成量机制,是linux系统提供的一种同步机制,用于一个执行单元等待另一个执行单元执行完某件事。(一个线程阻塞在那,等待另外一个线程去唤醒它)struct completion{ unsigned int done; wait_queue_head_t wait;};1、定义completionstruct completion my_completion;2、初始化completioninit_completio原创 2021-02-07 20:49:59 · 648 阅读 · 0 评论 -
Linux 内核线程kthread
我们可以使用kthread_run()去创建一个内核线程并启动它,当一个内核线程被启动之后就会不停的运行下去除非其他线程调用了kthread_stop来结束这个线程,但是我们在调用kthread_stop之前一定要检查需要被终止的线程是否还在运行,如果kthread_stop调用了一个未运行的线程造成的后果是完犊子的(我这里做的实验就是导致我的虚拟机完全卡死,原因是kthread_stop调用的参数是个NULL),为了避免这种现象的出现还有一个重要的函数:kthread_should_stop,他的返回值是原创 2021-02-07 20:45:02 · 2544 阅读 · 0 评论 -
Linux在应用层读写寄存器
先说结论:在应用层可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,然后直接在应用层对寄存器进行操作。1、dev/mem 设备文件该设备文件是物理内存的全映像,通过分析dev/mem设备驱动可以知道,通过这个设备文件可以映射整个处理器的地址空间,而不单单是内存。这里的地址空间指的是处理器总线上的全部可寻址空间。除了内存,还有外设IO空间。也就是说通过/dev/mem可以映射0-0xFFFFFFFF的全部物理地址(这个物理地址是真是有效的,处理器访问这个物理地址原创 2020-09-24 14:04:15 · 1274 阅读 · 2 评论 -
Linux-Audio Codec
0、简要介绍处理器要处理外界的声音需要将外界的声音(模拟信号)转换成二进制数据(数字信号),这个过程涉及到了一个模拟信号到数字信号的转换过程,完成这个功能的就是ADC芯片,同样,如果处理器需要对外输出声音,那就就需要将数字信号装换成模拟信号,完成这个功能的就是DAC芯片。将这两者合起来我们就称之为音频编解码芯片,也就是Audio Codec。其工作流程是:外界的声音(模拟信号)通过麦克风进入Audio Codec中,经由ADC模块将模拟信号转换成数字信号后通过IIS接口送给SOC,SOC对这些数原创 2020-09-08 17:55:18 · 2160 阅读 · 2 评论 -
Linux子系统-IIC子系统
0、IIC总线汇总概览(1)三根通线线:GND、SCL、SDA(2)同步(同步通信,通信双方有一根时钟线,主从在同一个时钟下工作)、电平(通信线上传输的是电平信号)、低速、近距离(3)总线式结构,支持多个设备挂接在同一条总线上(4)主从式结构,通信双方必须一个是主设备、一个是从设备。主设备掌握每次通信的主动权,从设备按照主设备的节奏被动响应,每个从设备在总线中有唯一的地址,主设备通过从地址找到自己要通信的从设备(本质是广播)。(5)IIC主要用途就是主SOC和外围设备之间的通信,最大的优原创 2020-08-26 11:18:11 · 815 阅读 · 0 评论 -
linux中断处理上下部分
Linux中断处理为什么需要分为上下部分?linux中断处理不参与调度,所以中断处理事件过长会影响实时性;中断处理函数(ISR)运行事件应尽可能短,但有些处理不可能再很短时间内处理完成,于是linux内核提供中断处理上下部。Linux 中断处理上下部含义中断处理的上半部(top half ,又叫顶半部);中断处理的下半部(bottom half , 又叫底半部);上半部指的是中断处理程序,下半部则是指一些虽然与中断有相关性但是可以延后执行的任务。例如:在网络传输中,网卡接收到数据包这个.原创 2020-08-20 19:06:22 · 1148 阅读 · 0 评论