自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 sim7600(商用车新能源) 打包app进sdk

找到如图所示画线的位置将路径改为共享文件夹的位置,并将app编译出来newapp、tbox.db、dbcMsg.db放入到共享文件夹下,然后在output中将编译出来的三个文件在原始固件包中进行替换,然后将替换后的固件包再烧入到板子中。需要准备:原始sdk包(c3300商用车通用版),编译的sdk(c4a01),烧写工具。首先打开需要编译的sdk包下面的Makefile。然后:1.make c4a01。

2024-03-06 13:58:45 323

原创 emmc存储大小解决方案

如果在以上步骤中发现有什么关于log设备节点的问题,就将app进程和启动app的shell文件进程杀死掉,因为只有app才会用到plog进行打印。第三步:mkfs.ext4 /dev/mmcblk0p1,就格式化完成了,再运行app发现emmc就恢复正常了。输入:第一步:mkfs.ext4 /dev/mmcblk0p1 (格式:mkfs.ext4 参数 设备名。)将磁盘设备进行EXT4格式化,如果出现如上所示错误,然后进行。第二部:umount /dev/mmcblk0p1。

2023-12-19 15:44:10 405

原创 git 拉取提交代码

2.git add -u 是将git上拉下来的文件中有修改的部分上传到缓存去,我现在不想将bin和obj文件上传,所以我用git add -u ,因为bin和obj是我编译出来的文件并不是拉取下来的文件。3.5 git pull 用于从远程获取代码并合并本地的版本(就是将git上的代码同步到本地),因为我是刚拉下来的所以不用git pull。在相应文件夹:git clone + "拉取代码地址",将代码从git上拉到本地。1.git status 查看文件状态,红色的文件为修改过的文件。

2023-09-28 14:56:08 118

原创 时间戳代码

小时,分钟,秒和日是一样的不用计算:

2023-09-26 14:45:04 54

原创 【无标题】

为什么要用交叉编译工具链:gcc是linux下的编译工具,而我们编译出来的文件是要到自己的板子上跑的,所以要用到交叉工具链。将此工具链加到整个系统的环境变量下:(/etc/profile)说明没没有arm-op.......-gcc工具链。再make编译就通过了。

2023-08-18 15:28:45 89

原创 【无标题】

can盒模拟mcu给无线模块发信号:can盒通道1 H接无线模块H,L接L;选择设备can盒的型号,设置波特率 帧id(canid) 数据 发送次数以及间隔时间,点击发送。

2023-07-10 16:13:40 40

原创 工作 记录

3.编译过后find -name fiename(修改文件的名字),然后将修改过的app或文件替换掉原来的再编译。强刷sdk:在板子上找到boot的两个孔,用镊子将其短接,然后点击烧写,当开始烧写后将镊子拔掉。4.在output下面会生成文件,将文件替换掉需要烧写进板子的文件下面,此时就将打包完成了。1.工具:原始的sdk包;最终烧写进板子的文件;5,将替换好的最终烧写进板子的文件烧写进板子。

2023-07-06 15:43:59 41

原创 spi驱动框架(spi框架下的字符设备驱动框架)

首先修改设备树#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/module.h>#include <linux/errno.h>#include <linux/..

2022-04-07 10:27:21 330

原创 iIC驱动编写之ap3216c传感器

I.MX6U-ALPHA 开发板上通过 I2C1 连接了一个三合一环境传感器:AP3216C,AP3216C是由敦南科技推出的一款传感器,其支持环境光强度(ALS)、接近距离(PS)和红外线强度(IR)这三个环境参数检测ap3216c.h:#ifndef AP3216C_H#define AP3216C_H#define AP3216C_ADDR 0X1E /* AP3216C器件地址 *//* AP3316C寄存器 */#define AP...

2022-04-06 11:54:38 2755

原创 iic 驱动框架(在iic驱动框架下的字符设备驱动框架)

首先修改设备树,添加ap3216c@1e 节点信息#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/module.h>#include <linux/errno.h>#i...

2022-04-05 11:29:08 537

原创 INPUT子系统驱动框架

input 就是输入的意思,因此 input 子系统就是管理输入的子系统,和 pinctrl、gpio 子系统一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。#include <linux/types.h>#inclu..

2022-04-02 09:42:52 573

原创 linux杂项(MISC)驱动框架

所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号,随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解决此问题。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创建,因此采用 MISC 设备驱动可以简化字符设备驱动的编写#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h&g

2022-03-31 12:10:00 430

原创 platform设备驱动实验(led灯为例)

根据总线-驱动-设备驱动模型,IIC、SPI、USB这样实实在在的总线是完全匹配的,但是要有一些外设是没法归结为具体的总线:比如定时器、RTC、LCD等。为此linux内核创造了一个虚拟的总线:platform总线。 1、方便开发,linux提出了驱动分离与分层。 2、进一步引出了驱动-总线-设备驱动模型,或者框架。 3、对于SOC内部的RTC,timer等等不好归结为具体的总线,为此linux内核提出了一个虚拟总线:platform总线,platform设备...

2022-03-31 10:19:45 385

原创 基本的字符设备驱动框架

#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/module.h>#include <linux/errno.h>#include <linux/gpio.h>#include &

2022-03-25 16:39:17 589

原创 智能家居--人脸识别

#coding=UTF-8import sysreload(sys)sys.setdefaultencoding('utf8')import requests #导包并设置字符编码,因为在py中,出现中文默认会报错url = r'https://netocr.com/api/facerecog.do' #翔云api的接口地址key = r'用户个人的key码,可在个人中心查看' 如下张图 secret = r'用户个人...

2021-08-11 10:59:57 206

原创 2021-07-26

TCP/IP连接:机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”HTTP连接: HTTP协议即超文本传送协议(Hypertext Transfer Protocol),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服..

2021-07-26 10:22:17 45

原创 2021-07-25

TCP三次握手:第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端

2021-07-25 11:20:06 43

原创 2021-07-25

综合图表下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP6 表示层 例如XDR、ASN.1、SMB、AFP、NCP5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets4 传输层 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL

2021-07-25 10:36:38 97

原创 2021-06-28

tcp网络编程:1,int socket(int domain, int type, int protocol);domain指定协议族;type参数指定socket的类型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol通常赋值"0"。2, int bind(int sockfd, struct sockaddr *my_addr, int addrlen);sockfd是一个socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的so

2021-06-28 11:51:31 80

原创 2021-06-27

线程中与互斥锁相关概念及API(2):条件变量相关API1, 创建及销毁条件变量int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);int pthread_cond_destroy(pthread_cond_t cond);除非需要创建一个非默认属性的条件变量,否则pthread_cont_init函数的attr参数可以设置为NULL。2,等待int pthre

2021-06-27 10:58:11 37

原创 2021-06-27

互斥锁限制共享资源的访问:#include <stdio.h>#include <pthread.h>int g_data = 0; //共享资源pthread_mutex_t mutex;void *func1(void *arg){ printf("t1:%ld thread is creat\n",(unsigned long)pthread_self()); printf("t1:param is:%d\n",*((int *)arg));

2021-06-27 09:44:11 38

转载 2021-06-26

线程中与互斥锁相关概念及API:互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在这种方式下,每次只有一个线程可以向前运行。1,创建及销毁互斥锁:int pthread_mu

2021-06-26 12:01:13 37

原创 2021-06-26

进程与线程: 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。  线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是

2021-06-26 10:04:49 47

原创 2021-06-20

信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源的同步访问。1.semget创建或打开信号量集,原型:int semget(key_t key, int nsems, int semflg);该函数执行成功则返回一个信号量集的标识符,失败返回-1。返回的参数key是由ftok得到的键值;第二个参数nsems指明要创建的信号量集包含的信号量个数。如果只是打开信号量,把nsems设置为0即可。该参数只在创建信号量集时有效。第三个参数semflg为操作标识,可取如下值:0:取信号量

2021-06-20 11:30:24 95

原创 2021-06-19

高级信号:相比初级信号可以携带信息信号接收原型:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);第一个参数signum应该就是注册的信号的编号;第二个参数act如果不为空说明需要对该信号有新的配置;第三个参数oldact如果不为空,那么可以对之前的信号配置进行备份,以方便之后进行恢复。struct sigaction {void (*sa_handler)(int); //信

2021-06-19 15:11:07 97

原创 2021-06-19

信号:软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。信号的处理有三种方法,分别是:忽略、捕捉和默认动作忽略信号:大多数信号可以使用这个方式来处理,但是有两种信号不能被忽略(分别是 SIGKILL和SIGSTOP)。捕捉信号:需要告诉内核,用户希望如何处理某一种信号,说白了就是写一个信号处理函数,然后将这个函数告诉内核系统默认动作:对于每个信号来说,系统都对应由默认的处理动作,当发生了该信号,系统会自动执行。原型:typedef void (*sighandler_t)(in

2021-06-19 13:55:04 27

原创 2021-06-18

共享内存:1.shmget ( ):创建共享内存原型:int shmget(key_t key, size_t size, int shmflg);2…shmat ( ):挂接共享内存原型:void *shmat(int shmid, const void *shmaddr, int shmflg);3.shmdt ( ):去关联共享内存当一个进程不需要共享内存的时候,就需要去关联。该函数并不删除所指定的共享内存区,而是将之前用shmat函数连接好的共享内存区脱离目前的进程。原型:int sh

2021-06-18 10:37:26 67

原创 2021-06-16

消息队列:1,消息队列的创建与打开原型:int msgget(key_t key, int msgflg);2,向消息队列中发送消息原型:int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);3,从消息队列中接收消息原型:ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);4,消息队列的控制原型:int msgct

2021-06-16 11:01:06 33

原创 2021-06-16

有名管道(FIFO)命名管道也被称为FIFO文件,是一种特殊的文件。由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一。原型:int mkfifo(const char *filename, mode_t mode);有名管道通信:读取端:#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <stdio.h>#inc

2021-06-16 10:21:28 26

原创 2021-06-11

进程通信 无名管道:1.管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。2.单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。3.数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。(有点像队列哈)原型:int

2021-06-11 17:00:12 92

原创 2021-06-11

popen 函数:popen函数允许一个程序将另外一个程序作为新进程来启动,并可以传递数据或者通过它接受数据。原型:FILE *popen( const char command, const char mode )#include <stdio.h>#include <unistd.h>int main(void){char ret[1024] = {0};FILE *fp; fp = popen("ps","r"); //r为标准输出 i

2021-06-11 15:33:41 82 1

原创 2021-06-11

system函数原型:int system(char *command)#include <stdio.h>#include <unistd.h>int main(void){printf(“this pro get system data:\n”);if(system(“date”)==-1){printf(“execl failed\n”);perror(“why”); } printf("after execl\n"); retur

2021-06-11 15:12:52 67 1

原创 2021-06-09

exec函数族的作用:在调用进程内部执行一个可执行文件intexecl(const char * path, const char * arg, …)execl()用来执行参数path 字符串所代表的文件路径, 接下来的参数代表执行该文件时传递过去的argv(0),argv[1], …, 最后一个参数必须用空指针(NULL)作结束.#include <stdio.h>#include <unistd.h>int main(void){printf(“this pro g

2021-06-09 16:13:24 77 1

原创 2021-06-09

进程的wait:父进程等待子进程结束后才运行#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.h>int main(){pid_t pid;printf(“father pid is %d\n”,getpid());int cnt = 0;int data; pid = vfo

2021-06-09 14:52:40 32

原创 2021-06-08

vfork和fork区别:1.vfork直接使用父进程的存储空间,不拷贝2.vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行

2021-06-08 16:08:22 25

原创 2021-06-08

fork补充加强#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){ int data = 100; pid_t pid; printf("father pid is %d\n",getpid()); pid = fork(); //fork后拷贝代码段,父子进程都会执行后面的代码(看运行结果) if(pid>0){

2021-06-08 15:13:05 21

原创 2021-06-08

进程的创建 fork(父·子进程)fork函数调用成功,返回两次值,返回值为0,代表为子进程,返回值为非负数,代表为父进程#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){pid_t pid;printf(“father pid is %d\n”,getpid()); pid = fork(); if(pid>0){ p

2021-06-08 14:54:35 62

原创 2021-06-07

进程#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){pid_t pid; // 每个进程都会有一个非负整数的pid pid = getpid(); //pid获取 printf("pid:%d\n",pid); while(1); return 0;}...

2021-06-07 17:10:58 21

原创 2021-06-07

c标准库 文件的打开 写入 读取 光标移动 关闭#include <stdio.h>#include <string.h>int main(){FILE *fp;char *p = “nihao”;char buf[128] = {0}; fp = fopen("./test2","w+"); fwrite(p,sizeof(char)*strlen(p),1,fp); //第一个参数写入数据,第二个参数写入大小,第三个写入个数,第四个写入的文件

2021-06-07 16:32:21 41

原创 2021-06-07

编程实现CP指令:步骤:1.打开第一个目标文件2.读取里面的数据3.打开第二个目标文件4.将读取的数据写入5.关闭文件#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>int m

2021-06-07 15:01:03 25

空空如也

空空如也

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

TA关注的人

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