_lv_
码龄14年
求更新 关注
提问 私信
  • 博客:46,160
    社区:1
    46,161
    总访问量
  • 27
    原创
  • 13
    粉丝
  • 15
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2011-09-06
博客简介:

ctgulvzhaole的博客

查看详细资料
个人成就
  • 获得26次点赞
  • 内容获得5次评论
  • 获得202次收藏
  • 代码片获得121次分享
  • 博客总排名2,081,075名
创作历程
  • 9篇
    2022年
  • 21篇
    2021年
成就勋章
TA的专栏
  • c语言
    12篇
  • linux
    25篇
  • dtsi
    1篇
  • 工具
    4篇
  • git
    2篇
  • driver
    4篇
  • Framework
    1篇
  • Android
    3篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 1

TA参与的活动 0

创作活动更多

『技术文档』写作方法征文挑战赛

在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结于文档结构与内容的完美融合?无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

55人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

sizeof 获取 extern 数组长度

sizeof是获取数组元素个数的常用运算符::在中期望通过运算符获取中元素个数,然而这么做是错误的,编译时无法通过,错误提示类似这类。造成这一问题的原因在于,**是在编译时计算的,而C/C++的编译是以文件为基本单位的**。在编译文件时,编译器是不可能知道定义在文件中数组具体信息的,只根据文件中的声明是无法确定的具体大小的,因此,就算某些编译器编译时不报错,得到的结果也是...
转载
发布博客 2022.06.17 ·
968 阅读 ·
0 点赞 ·
2 评论 ·
4 收藏

linux内核启动地址的确定

内核编译链接过程是依靠vmlinux.lds文件,以arm为例vmlinux.lds文件位于kernel/arch/arm/vmlinux.lds,vmlinux-armv.lds的生成过程在kernel/arch/arm/Makefile中ifeq ($(CONFIG_CPU_32),y)PROCESSOR = armvTEXTADDR = 0xC0008000LDSCRIPT = arch/arm/vmlinux-armv.lds.inendifarch/a
转载
发布博客 2022.04.07 ·
2231 阅读 ·
1 点赞 ·
0 评论 ·
11 收藏

Linux IPC 进程间通信——信号量sem

Linux 进程间通信——信号量sem
原创
发布博客 2022.01.28 ·
2181 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Linux IPC 进程间通信——信号signal

首先认识几个相关的信号函数,signal、kill、raise、pause。一、相关函数分析signal函数void (*signal(int signum,void(* handler)(int)))(int);说明:当前进程收到signum对应的信号之后,会执行handler指向的函数。其中signum有#define SIGHUP 1 /* Hangup (POSIX). */#define SIGINT ...
原创
发布博客 2022.01.11 ·
475 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux IPC 进程间通信——消息队列message

消息队列是消息的连接表,存储在内核中。本实例主要实现消息队列方式进行进程间通信,接收端收到消息之后,立马转发给发送端;发送端发出消息之后,立马监听接收端回馈的消息,实现一个双向通信示例。一、示例发送端client.c#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <sys/types....
原创
发布博客 2022.01.08 ·
1172 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux IPC 进程之间通信——共享内存shared Memory

服务端代码 shmServer.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/shm.h>#include <sys/types.h>#include <sys/ipc.h>#include <fcntl.h>#include <string.h>#define...
原创
发布博客 2022.01.08 ·
266 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux IPC 进程之间通信——无名管道pipe实例

无名管道只限于有亲缘关系的父子进程之间进行同行#include <unistd.h> #include <sys/types.h>#include <sys/wait.h>#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h>int main() { int pipe_fd[2];
原创
发布博客 2022.01.06 ·
1145 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Linux IPC 进程之间通信——有名管道FIFO实例

写端fifo_write.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <fcntl.h>#include <sys/stat.h>#include <string.h>#define FIFO_PATH "/tmp/myfifo"int main(){ int pip
原创
发布博客 2022.01.06 ·
802 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

回调函数实例

callback可以实现模块之间通信,底层实现调用,上层实现具体的回调函数内容底层函数实现#include <stdio.h>int runCallback(int (*func)(int a, int b)){ int a,b; a = 3; b = 4; return func(a,b);}头文件#ifndef __RUNCALLBACK__H#define __RUNCALLBACK__Hint runCallback(i
原创
发布博客 2022.01.04 ·
334 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux环境变量profile

/etc/profile:/etc/bashrc:~/.bash_profile:~/.bashrc:~/.bash_logout位置:/etc/profile作用于所有用户,用户登录时被执行,.并从/etc/profile.d目录的配置文件中搜集shell的设置.,修改后需重启生效,此修改对每个用户都生效;位置:/etc/bashrc作用于所有用户,每次启用bash shell时被执行,修改后重新打开一个shell就生效位置:~/.bash_profile作用于当前用户,用
原创
发布博客 2021.09.22 ·
2651 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

Linux 驱动创建Proc文件系统接口

目录 它有什么作用呢? 如何实现?Linux的procfs文件系统是一个虚拟文件系统,Linux不只有一个虚拟文件系统,sysfs和debugfs也是虚拟文件系统,sysfs在procfs的基础上进行了优化。虚拟文件系统在系统运行时创建,存在于内存。 它有什么作用呢?它是一种在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。...
原创
发布博客 2021.09.09 ·
1050 阅读 ·
0 点赞 ·
1 评论 ·
6 收藏

Linux-僵尸进程产生与处理

背景父进程创建子进程之后,父进程没有等待该子进程的退出,子进程就会成为僵尸进程,如果父进程也退出,这个时候子进程也可以被init进程回收,释放资源。如果父进程不退出,子进程占用的资源将永远不会被释放。产生以下示例是一个产生僵尸进程的典型例子#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(int argc, char **argv) { p...
原创
发布博客 2021.09.05 ·
363 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Windows批处理执行拷贝

自动执行拷贝,先看脚本@echo offset DST=J:\set SRC=install.img if exist %DST% ( echo doing copy %SRC% %DST% .... copy %SRC% %DST%) else ( echo %DST% not exist)echo echo copy %SRC% to %DST% donepause上述文件保存为bat后缀的文件,放到你要拷贝的的目录下,当然你也可以放到任意位置,只需要修改SRC
原创
发布博客 2021.08.31 ·
1223 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Android10 自建System API AIDL跨进程回调

以一个串口混杂类型为例,需要完成server端和client端一、Server端1、AIDL文件创建ISerialMiscService.aidl 文件// file:ISerialMiscService.aidlpackage android.os;import android.os.ISerialMiscServiceCallback;interface ISerialMiscService { void setVal(String key, String value);
原创
发布博客 2021.08.29 ·
463 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux 一个简单的Makefile

.PHONY: clean testTARGET=testSRC=test.cOBJS=$(SRC:.c=.o)CC=gccCLFAGS=-g -O2LIB=-L ./lib -laddINC=-I ./inc$(TARGET):$(OBJS) $(CC) -o $@ $^ $(LIB)%.o:%.c $(CC) -o $@ -c $^ $(INC)clean: rm -rf *.o $(TARGET)
原创
发布博客 2021.08.22 ·
343 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux 内核模块互调

如果有两个模块A和B,要想实现互调,必须进行声明和引用。下面以A调用B的funcA为例模块A 定义函数 void funcA(void){ ...}注意这里函数返回值不能定义为static型 声明函数为外部可用 EXPORT_SYMBOL(funcA);模块B 声明函数 extern funcA(void); 函数调用 static void funcB(void){ ... funcA();}...
原创
发布博客 2021.08.18 ·
179 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux 一个简单的input设备驱动

一个简单的input设备驱动,先直接上代码#include <linux/input.h>#include <linux/module.h>#include <linux/init.h>#include <asm/irq.h>#include <asm/io.h>static struct input_dev *button_dev;static irqreturn_t button_interrupt(int ir...
原创
发布博客 2021.08.15 ·
500 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux dtsi文件解析

来历Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、re...
原创
发布博客 2021.08.15 ·
8543 阅读 ·
5 点赞 ·
0 评论 ·
41 收藏

Linux 计划自动执行任务-Crontab

在Linux中计划自动化任务,执行数据备份、更新系统、定期重新引导等。它是一个守护进程,按照指定的时间间隔执行这些任务,crontab1》系统范围的crontab,位于/etc/crontab,需要root权限2》用户创建的crontab,/var/spool/cron或者/var/spool/cron/crontabs检测或安装 crontab确认crontab是否安装:执行 crontab 命令如果报 command not found,就表明没有安装#cron..
原创
发布博客 2021.06.21 ·
1031 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

使用enum枚举量初始化数组

enum { _TEST_A, _TEST_B, _TEST_C, _TEST_D, _TEST_E, _TEST_MAX,};static char g_test_table[_TEST_MAX] = { [_TEST_D] = 'd', [_TEST_A] = 'a', [_TEST_B] =.
原创
发布博客 2021.06.10 ·
1040 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏
加载更多