- 博客(122)
- 资源 (5)
- 收藏
- 关注
原创 全志R16的音频流程(DMA部分)
snd_pcm_playback_ioctl1 ->snd_pcm_lib_write ->snd_pcm_lib_write1 ->各の状態判断 ->transfer (snd_pcm_lib_write_transfer) ->char *hwbuf = runtime->dma_area + frames_to_bytes(runtime, hwoff); ->(copy_from_user(hwbuf, buf, frame
2022-04-26 10:07:30
610
原创 linux时钟子系统3-各种时钟函数的分析
前言在前一篇的刚开始引用了一个经典的clk设定的例子,然后大篇幅的详细的讲解了 clk_register的过程,接下来我们将继续讲解这个经典例子中所引用的各个函数,我们在贴一下。static int sunxi_spi_clk_init(struct sunxi_spi *sspi, u32 mod_clk){ int ret = 0; long rate = 0; //获取设备树中,对应时钟部分的第1项: clk_pll_periph0 (作为父时钟) sspi->pclk = of_
2022-03-28 15:15:16
227
原创 linux时钟子系统2-各种时钟函数的分析
前言分析下 clk_register 的流程。重要的结构体分析一个函数的流程之前,必须要搞清楚结构体的定义,才能知道其背后的用途。clk_hwstruct clk_hw { struct clk *clk; const struct clk_init_data *init;};其中的 clk结构体,用来表示 clk之前的关系(parent,children),以及当前的频率(clk rate)用,clk_init_data 结构体,提供了体层的操作函数 fops。函数分析struc
2022-02-01 15:09:10
1791
原创 linux时钟子系统4-平台初始化
前言1.首先介绍下 linux初始化时,时钟的脉络。2.介绍各个种类时钟的初始化流程。3.此篇基于 全志的t7进行讲述:sun8iw17p1linux启动时,时钟的初期化在介绍之前,先要理清楚,machine_desc,即 设备描述符。machine_desc的获取这个描述符比较重要,里面有个init_time函数,被内核调用,所以想要搞清楚他的由来。首先看下 连接脚本文件 。cat linux-3.10/arch/arm/kernel/vmlinux.lds.S.init.arch.
2022-01-28 17:28:42
1978
转载 Panel重要参数解析
panel的从显示类型上分,主要可分为LCD和LED两种。 前者是由背光模块加上对液晶的控制来显示图像,最大的特点是背光不会闪烁,相对而言对眼睛更好。 后者是相对比较新的技术,“像素”颗粒可以各自独立地进行发光,从而省去了LCD的背光模块,可以做的更轻薄且不再需要很大的边框防止漏光,故也是超窄边框的首选。LED的动态比更好,理论上的显示效果也会强于LED,但像素颗粒中的蓝色发光材料衰减快,所以LED屏的调节难度...
2021-09-10 12:33:39
2218
原创 linux adb设备不识别
mxg@mxg:~/workSpace$ adb devicesdaemon not running. starting it now on port 5037 *daemon started successfully *List of devices attached??? no permissions这种没权限很奇怪,我在 /etc下是有定义的:mxg@mxg:/etc/udev/rules.d$ cat /etc/udev/rules.d/70-android.rulesUBS.
2021-08-19 09:23:56
296
原创 linux下删除正在运行的程序文件
linux下删除正在运行的程序文件答:不会有任何影响。Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。i_count 和 i_nlink,从VFS inode结构体中可以找到:struct inode {struct hlist_node i_hash;struct list_head i_list;struct list_head i_s
2021-08-16 14:37:10
3455
原创 copy_from_user
关于在驱动中 copy_to_user 与memcpy的区别,参考下面文章就可以了。https://www.zhihu.com/people/smcdef-74但是上面的文章,有个地方说的不太清楚,比如说 driver中用copy_to_user时,将数据传入user层提供的地址,user提供的是非法的地址时,是不会引发引发内核 oops,用户层的read函数仅仅是返回 "bad address"信息,这是如何做到的呢?这就关系到了内核的 fixup功能。...
2021-07-09 17:42:55
347
原创 利用WARN_ONCE调查fbmem.c的调用关系
WARN_ONCE感觉真是神奇,可以打印函数的调用关系,很是牛逼,fbmem.c是显示驱动的统合管理模块,所以想了解下它的open,read,write函数的调用关系。首先看一下加入的地方(注意WARN_ONCE 指定 打印出用 EXPORT_SYMBOL定义的函数)。diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.cindex 76c1ad9..3e55ffc 100644--- a/dr
2021-04-02 11:58:20
1042
原创 浅谈内核的module模块
浅谈内核的module模块以前一直不知道 linux 驱动的 .ko 到底是个什么,有什么用,所以简单的分析一下。ko文件如何形成,它是什么格式?首先随便写个 helloworld 驱动,make V=1 打开详细编译log查看(我的这里是 kobj.ko)取出关键的部分:gcc -DKBUILD_MODNAME='"kobj"' -DMODULE -c -o /home/mxg/workSpace/Intermals_of_Linux_device_driver/chap09/kobj/kob
2021-03-31 13:39:49
820
原创 Makefile中判断文件是否存在
Makefile中判断文件是否存在:exist = $(shell if [ -f $(file) ]; then echo “master conf file exist”; fi;)all:$(if $(exist ) , cp -f $(file) $@ , )
2021-03-12 11:15:04
1515
原创 关于字符串的反转问题
有时候的需求比较奇怪,下面直接贴出代码,用到的技术点有两个1.字符串反转,即交换位置的方法用异或2.格式化输出,要求每4个字节用"-"隔开#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _Data { char rawData[5][4]; char...
2019-01-29 09:38:04
262
原创 关于Makefile的编译简洁
在编写大型项目的时候,往往编译log是非常多的,让人看着不舒服比如说一个简单的helloWorld程序:#include &lt;stdio.h&gt;int main(){ printf("hello world\n"); return 0;}Makefile也比较简单:gcc -o 11 1.c所以 make 执行后,输出: gcc -o 11 1.c,如果...
2019-01-23 09:19:26
372
原创 深入Linux编程系列前言
本系列主要记载一些Linux应用编程实际项目中需要注意的事情,涉及的范围包括:一. Linux应用工程师必要的一些内核知识,以及glibc的知识1.1 什么是虚拟内存VMA,mmu,为什么每个程序都是4G空间,OS是如何做的(带图)1.2 fork 到底是怎么回事儿,如何在OS上运行的(带图)1.3 线程到底是什么,为什么应用层有线程的概念,内核层没有,线程与进程到底是什么关系(带图)1...
2018-11-20 11:00:07
399
原创 Linux下编程注意---32位系统移植到64位系统
#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;pthread.h&gt;#include &lt;unistd.h&gt;#include &lt;malloc.h&gt; pthread_t thread_id[2];unsigned int c;vo
2018-11-20 09:41:28
1285
原创 通俗理解Linux上的硬链接和软链接
假设目录“~”下面不存在a, b, c这样的文件,在该目录下面执行如下命令:题目步骤$ echo hello &gt; a$ ln a b$ ln -s a c$ rm a$ echo world &gt; a请问接下来执行“cat b”输出什么?执行"cat c”输出什么?解释为什么!详细论述其中关于inode等的变化■基本概念一.文件在linux上的构成1.inode...
2018-09-22 10:03:40
932
原创 Linux中pthread_detach()线程注意
一、创建分离线程有两种方式创建分离线程:(1)在线程创建时将其属性设为分离状态(detached);(2)在线程创建后将其属性设为分离的(detached)。二、分离线程的作用由系统来回收线程所占用资源。三、实例#include <stdlib.h>#include <string.h>#include <unistd.h>#i...
2018-09-01 10:34:02
1199
原创 关于Linux IPI中断
两个核,核A发送 smp_call_function_single函数,这个函数给B核发送IPI中断 B核被中断后,执行handle_IPI函数,走IPI_CALL_FUNC_SINGLE分支,B核执行generic_smp_call_function_single_interrupt函数 linux版本 3.2.0...
2018-09-01 09:47:21
4902
转载 Linux多线程编程详细解析----条件变量 pthread_cond_t
Linux操作系统下的多线程编程详细解析—-条件变量1.初始化条件变量pthread_cond_init#include &amp;lt;pthread.h&amp;gt;int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初始化一个条件变量。当参数...
2018-08-30 22:23:56
440
原创 关于信号量 sem系列函数
#include&lt;semaphore.h&gt; int sem_wait(sem_t*sem); intsem_trywait(sem_t *sem); intsem_timedwait(sem_t *sem, const struct timespec *abs_timeout); 与 -lrt 或 -pthread 一起链接。glibc 需要特性测试宏(参看 feature_...
2018-08-30 20:25:47
6701
转载 进程栈与线程栈的关系
本文转自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2018590&pid=24691312&page=1&extra=page%3D1#pid24691312大家好,本人被下面这个问题困扰了一段时间,最近似乎找到了答案。 这里和大家分享一下,可能对有相同困惑的同学有点帮助,同时也请各位帮忙...
2018-05-24 13:33:49
7329
1
转载 mmap系统调用的实现
GLIBC 文件 sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c:__ptr_t __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) { if (offset & ((1 << MMAP_PAGE_SHIFT) - 1)) //
2017-10-31 22:40:46
1411
转载 可重入和不可重入
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存
2017-08-29 15:11:35
779
原创 深入理解LCD之寄存器配置
前言 上篇介绍了LCD控制器的基本特性, 接下来谈一下寄存器的配置, lCD的寄存器配置主要涉及到的寄存器有 1.引脚的配置 2.LCDCON1->LCDCON5配置各种信号 3.LCDSADDR1->LCDSADDR3 frameBuffer 地址之类的 由于配置寄存器挺多的内容,所以结合初始化代码来理解寄存器的配置引脚的配置 GPIO与LCD控制器共用了一些信号线,为了让LCD控制
2017-06-05 22:01:58
8068
原创 深入理解LCD之基本特性
前言 这篇主要介绍一下LCD的基本特性, 所选LCD信息: 大小: 4.3寸液晶屏(TFT) 型号: AT043TN24显示原理 市面上LCD屏的种类繁多,这里以最常用的TFT屏为例进行讲解 ,要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外
2017-06-01 22:57:44
6315
5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人