自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

human!的专栏

实力铸造经典,王者绝非偶然

  • 博客(122)
  • 资源 (5)
  • 收藏
  • 关注

原创 LCD timing的理解

lcd 时序参数

2023-01-26 17:00:45 1423

原创 LINUX软中断-ksoftirqd

ksoftirqd

2023-01-20 15:50:59 3786

原创 LINUX软中断-softirq

linux软中断

2023-01-17 17:41:26 1786

原创 浅谈ioremap,vmalloc,mmap三者之间的实现&区别

linux mmap&ioremap

2022-12-15 00:48:11 2393

原创 sunxi-spi驱动的DMA配置

DMA

2022-11-29 14:15:15 891

原创 DMA的执行(6)

DMA

2022-10-12 14:20:21 388

原创 DMA的应用示例(5)-DMA descriptor的赋值

DMA

2022-10-07 12:26:44 1194

原创 DMA的应用示例(4)-前期准备

DMA

2022-10-07 10:04:19 645

原创 DMA框架图(2)

DMA框架图

2022-10-05 10:15:24 298

原创 DMA controller driver & framework(3)

linux DMA

2022-10-04 17:34:59 580

原创 初识DMA(1)

DMA

2022-10-04 09:53:03 1391

原创 linux下内核获取应用的物理地址

线性地址

2022-07-18 16:47:38 879

原创 应用层reboot后的大体流程

reboot

2022-06-15 13:38:24 186

原创 全志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 511

原创 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 146

原创 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 1704

原创 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 1853

原创 linux时钟子系统1-扫盲

时钟子系统

2022-01-28 14:01:38 2269

转载 Panel重要参数解析

panel的从显示类型上分,主要可分为LCD和LED两种。 前者是由背光模块加上对液晶的控制来显示图像,最大的特点是背光不会闪烁,相对而言对眼睛更好。 后者是相对比较新的技术,“像素”颗粒可以各自独立地进行发光,从而省去了LCD的背光模块,可以做的更轻薄且不再需要很大的边框防止漏光,故也是超窄边框的首选。LED的动态比更好,理论上的显示效果也会强于LED,但像素颗粒中的蓝色发光材料衰减快,所以LED屏的调节难度...

2021-09-10 12:33:39 1967

原创 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 216

原创 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 2914

原创 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 252

原创 利用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 840

原创 浅谈内核的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 712

原创 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 1333

原创 关于字符串的反转问题

有时候的需求比较奇怪,下面直接贴出代码,用到的技术点有两个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 198

原创 关于Makefile的编译简洁

在编写大型项目的时候,往往编译log是非常多的,让人看着不舒服比如说一个简单的helloWorld程序:#include <stdio.h>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 322

原创 深入Linux编程系列前言

本系列主要记载一些Linux应用编程实际项目中需要注意的事情,涉及的范围包括:一. Linux应用工程师必要的一些内核知识,以及glibc的知识1.1 什么是虚拟内存VMA,mmu,为什么每个程序都是4G空间,OS是如何做的(带图)1.2 fork 到底是怎么回事儿,如何在OS上运行的(带图)1.3 线程到底是什么,为什么应用层有线程的概念,内核层没有,线程与进程到底是什么关系(带图)1...

2018-11-20 11:00:07 367

原创 Linux下编程注意---32位系统移植到64位系统

#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <malloc.h> pthread_t thread_id[2];unsigned int c;vo

2018-11-20 09:41:28 1179

原创 unlink漏洞

http://wonderkun.cc/index.html/?p=651

2018-11-02 13:23:51 570

原创 通俗理解Linux上的硬链接和软链接

假设目录“~”下面不存在a, b, c这样的文件,在该目录下面执行如下命令:题目步骤$ echo hello > a$ ln a b$ ln -s a c$ rm a$ echo world > a请问接下来执行“cat b”输出什么?执行"cat c”输出什么?解释为什么!详细论述其中关于inode等的变化■基本概念一.文件在linux上的构成1.inode...

2018-09-22 10:03:40 864

原创 Linux中pthread_detach()线程注意

一、创建分离线程有两种方式创建分离线程:(1)在线程创建时将其属性设为分离状态(detached);(2)在线程创建后将其属性设为分离的(detached)。二、分离线程的作用由系统来回收线程所占用资源。三、实例#include <stdlib.h>#include <string.h>#include <unistd.h>#i...

2018-09-01 10:34:02 1127

原创 关于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 4663

转载 Linux多线程编程详细解析----条件变量 pthread_cond_t

Linux操作系统下的多线程编程详细解析—-条件变量1.初始化条件变量pthread_cond_init#include <pthread.h>int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初始化一个条件变量。当参数...

2018-08-30 22:23:56 368

原创 关于信号量 sem系列函数

#include<semaphore.h> 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 6296

转载 进程栈与线程栈的关系

本文转自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2018590&pid=24691312&page=1&extra=page%3D1#pid24691312大家好,本人被下面这个问题困扰了一段时间,最近似乎找到了答案。 这里和大家分享一下,可能对有相同困惑的同学有点帮助,同时也请各位帮忙...

2018-05-24 13:33:49 7226 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 1312

转载 可重入和不可重入

重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存

2017-08-29 15:11:35 733

原创 深入理解LCD之寄存器配置

前言 上篇介绍了LCD控制器的基本特性, 接下来谈一下寄存器的配置, lCD的寄存器配置主要涉及到的寄存器有 1.引脚的配置 2.LCDCON1->LCDCON5配置各种信号 3.LCDSADDR1->LCDSADDR3 frameBuffer 地址之类的 由于配置寄存器挺多的内容,所以结合初始化代码来理解寄存器的配置引脚的配置 GPIO与LCD控制器共用了一些信号线,为了让LCD控制

2017-06-05 22:01:58 7416

原创 深入理解LCD之基本特性

前言 这篇主要介绍一下LCD的基本特性, 所选LCD信息: 大小: 4.3寸液晶屏(TFT) 型号: AT043TN24显示原理 市面上LCD屏的种类繁多,这里以最常用的TFT屏为例进行讲解 ,要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外

2017-06-01 22:57:44 5623 5

VESA_tools.7z

VESA_tools.7z

2021-09-24

Linux下替换memset函数

Linux下替换memset为自己写的函数,但是用jmp绝对跳转时会遇到段错误的问题

2019-02-23

网路设备驱动

史上最详细的基于linux的网络设备驱动详解,不看不知道,一看吓一跳

2018-03-14

SDRAM-高手进阶,终极内存技术指南——完整进阶版

SDRAM-高手进阶,终极内存技术指南——完整进阶版

2017-05-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除