- 博客(62)
- 资源 (10)
- 问答 (2)
- 收藏
- 关注

原创 “kernel is not clean, please run make mrproper ” 的解决办法
遇见如下问题:make[2]: *** [prepare3] Error 1make[2]: *** 正在等待未完成的任务....package/pkg-generic.mk:238: recipe for target '/home/sunhelong/work/buildbetter/buildroot/output/build/linux-custom/.stamp_built' failedmake[1]: *** [/home/sunhelong/work/buildbetter/buil
2020-05-25 17:23:02
935

原创 linux支持 zImage rootfs dtb 剥离 及 zImage和dtb拼接
1.1. 选择bootz模式启动zImage内核之前选择bootm模式启动boot.im,boot.img带有its格式的header,需要根据header去header。现在直接启动zImage,需要通过do bootz()函数启动。方式如下:1.1.1. 在uboot目下执行make menuconfig,选中bootz1.1.2. 选中Command line interface —> Boot commands —> bootz1.1.3. 选中Enable a defa
2020-05-25 17:01:41
3883
原创 adb: error: 46-byte write failed: Invalid argument
adb push fail问题解决方法记录
2023-10-23 14:22:07
1321
原创 【问题】进程间发送消息队列无法接受
每个进程都进行mq_open(”/tmp_mq", O_RDWR,…)获取自己的消息队列标识符,然后使用此标识符在进程下mq_send和mq_receive就可以解决此问题。消息队列标识符无法在进程间共享,每个进程都需要获取自己的消息队列标识符。但是可以访问同一个消息队列名称,(要以"/“开头,保持名称路径一致)。
2023-08-02 10:43:21
263
原创 ipc msg
(2)消息队列类似于管道却又比管道更加人性化,管道的读端只要是管道里有消息都会将其读走,而消息队列是有选择性地去读取数据,只要不是它想要地都不会读走。4.当一个发送方往消息队列中发送数据时,接收方一直还没接收,数据会一直在消息队列里等待接收方的出现。(3)当消息队列的写端往消息队列写入数据时,读端还没打开,数据会一直在消息队列中等待它读端打开。//获取消息队列id号,如果不存在则创建。//每次清空一下结构体变量里的内容。//申请一个消息队列结构体变量。/* 消息队列接收 *///设计消息队列结构体。
2023-05-10 11:36:27
144
原创 ubuntu warning: gpg (GnuPG) is not available. 解决办法
lrwxrwxrwx 1 root root 13 5月 16 09:38 git-repo.repo -> /usr/bin/snap。lrwxrwxrwx 1 root root 13 5月 16 09:38 repo -> git-repo.repo。-rw-r–r-- 1 kkkkcom kkkkcom 45277 5月 26 10:40 repo。-rw-r–r-- 1 root root 45277 5月 26 10:40 repo。
2023-03-28 16:37:13
2013
原创 AP BP CP
AP(application processor):应用处理器。CP(communicate processor):通讯处理器。BP(Baseband processor):基带处理器。
2023-03-22 16:25:15
238
原创 clk_enable()和 clk_prepare_enable()区别
clk_enable()和clk_disable()。只有clk_enable()和clk_disable()带来的问题是,有时候,某些硬件。用的clk_enable()。而clk_prepare_enable()则同时完成准备和使能的工作,当然也只能在可能睡眠的上。clk_enable()分解成不可在原子上下文调用的clk_prepare()(该函数可能睡眠)和可以在原子上下文调。加上prepare后,把过去的。名称中含有prepare、unprepare字符串的API是内核后来才加入的,过去只有。
2023-03-19 14:22:34
1147
原创 中断控制器
与local_irq_disable()和local_irq_enable()不同,disable_irq()、enable_irq()针对的则是中断。GPIO0_5中断发生的时候,内核的调用顺序是:sirfsoc_gpio_handle_irq()->generic_handle_irq()-irq_domain_add_legacy()、irq_domain_add_linear()、irq_domain_add_tree()等。在内核中,通过irq_chip结构体来描述中断控制器。
2023-03-17 22:52:45
1607
转载 Dynamic DMA mapping Guide
对于一个硬件设备上的寄存器等设备资源,内核是按照物理地址来管理的。如果设备在MMIO地址空间中有若干的寄存器,或者该设备足够的智能,它可以通过DMA执行读写系统内存的操作,这些情况下,设备使用的地址就是总线地址。例如:即便是一个系统支持64位地址内存和64 位地址的PCI bar,但是DMA可以不使用全部的64 bit地址,通过IOMMU的映射,PCI设备上的DMA可以只使用32位DMA地址。在DMA API中涉及好几个地址的概念(物理地址、虚拟地址和总线地址),正确的理解这些地址是非常重要的。
2023-03-13 15:28:06
99
原创 linux字符设备和块设备的区别 以及网络设备
2、块设备对I/0请求有对应的缓冲区,因此他们可以选择以什么样的顺序进行响应。对于存储设备而言,调整读写的顺序作用巨大,因为读写连续的扇区的读写速度比分离的扇区更快。1、字符设备以字节为单位。大多数设备是字符设备,因为他们不需要缓冲而且不以固定块大小进行操作。4、块设备工作于VFS(虚拟文件系统)之下。1、块设备只能以块为单位接受输入和输出。2、字符设备无需缓冲直接读写。3、字符设备只能被顺序读写。3、块设备可以随机访问。
2023-03-11 18:50:52
1147
原创 strlen 和sizeof
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。strlen原型:strlen遇到‘\0’返回,其长度不包括‘、0’sizeof是一个运算符,不是函数。
2023-03-09 10:11:52
78
原创 DMA cache一致性怎么保持(修改中)
(1)在向内传输(rx)时,DMA设备将数据写入内存后,DMAC将向CPU发出中断请求,在RX ISR中使用该内存之前,需要先InvalidateD-Cache(sync_single_for_cpu)使cache无效重填(refill),此时CPU通过高速缓存cache获得的才是最新的数据。CPU的读/写用的是不同的cache(读用的是cache,写则用的是write buffer),所以建立流式DMA映射需要指明数据在DMA通道中的流向,以便由内核决定是操作cache还是write buffer。
2023-03-08 23:56:49
583
原创 while(i ++) i是先加1 ,再进入循环体
写程序用while(i++)碰到一个问题,i的初始值没有进入循环体,后来验证后发现,i是先加1,再进入的循环体。
2023-03-08 16:37:24
726
原创 MMU作用及Cache作用
2、TTW(Translation Table Walk):即转换表漫游,当TLB中没有缓冲对应的地址转换关系时,需要通过通过对内存中转换页表(大多数处理器的转换为多级页表)的访问来获得虚拟地址和物理地址的对应关系.TTW成功后,结果写入TLB中。1、TLB(Translation Lookside Buffer):即转换旁路缓存,TLB时MMU的核心部件,它缓存少量的虚拟地址和物理地址的转换关系,是转换表的cache,因此也经常被成为“快表”。
2023-03-02 23:34:48
373
原创 如何唤醒 wait_event_interruptible()
线程1通过系统调用进入内核,后调用wake_up_interruptible等待唤醒事件,当事件不满足条件时,线程1进入休眠状态。中断或其他线程任务事件满足条件时,调用wait_event_interruptible,唤醒等待在wait_queue_head上的线程1。如果两个线程调用wait_event_interruptible(test,condition)阻塞休眠,一个中断调用wake_up_interruptible(test)但是并没有设置condition为1,会怎么样?
2023-02-28 17:04:46
384
原创 Linux下实现线程同步的四种方法:
条件本身是由互斥量保护的。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待“条件变量的条件成立”而挂起;如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。动态初始化,int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁。
2023-02-28 15:49:04
1718
原创 g2d驱动设计流程
2、根据寄存器手册配置g2d 设备时钟。1、获取g2d 设备寄存器地址及映射。5、实现g2d中断函数。5、实现ioctl函数。
2023-02-24 17:03:26
297
原创 const char *str,char const *str,char *const str区别
str指向的内容是只读的,但是str 指向的地址是可以变的。
2023-02-23 23:32:30
213
原创 理解void *与 *(void **)的区别
就是它所指向的,在这里是指向放void型的地方;void** 是说: 这也是一个指针,去掉一个()就是它所指向的,它指向一个放void*型的地方.void* 是说: 这是一个指针,去掉一个(
2023-02-22 14:20:49
1233
原创 linux5.10升级
linux官网下载linux代码: https://www.kernel.org/1、下载最新linux代码。2、查看config信息。
2022-08-22 16:34:45
762
原创 Wrong JPEG library version: library is 80, caller expects 62 解决办法
添加/usr/include/jconfig.h,并将JPEG_VERSION的值由62设为80,这样可以轻松构建项目并链接正确的版本。
2022-05-10 23:58:15
1681
2
原创 遍历文件夹下所有子目录下的文件(linux C )
void listDir(char *path){ DIR *pDir ; struct dirent *ent ; int i=0 ; char childpath[512]; char childfile[512]; pDir=opendir(path); memset(childpath,0,sizeof(childpath)); while((ent=readdir(pDir))!=NULL) { if(ent->d_type & DT_DIR) {
2021-11-23 10:27:40
242
VSCodeUserSetup-x64-1.43.2.exe.7z
2020-07-23
yuvplayer.7z
2020-07-23
XnViewMP-win-x64.exe
2020-07-23
Elecard-HEVC-Analyzer.zip
2020-07-23
基于yocto和buildroot平台的syslog配置分享版.doc
2020-04-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人