![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 50
pingxiaozhao
光看不练假把式!
展开
-
(6) led驱动--分层设计--总线设备驱动模型
1.具体硬件控制---具体配置//led_opr.h #ifndef _LED_OPR_H#ifndef _LED_OPR_Hstruct led_operations { int (*init)(int which); int (*ctl)(int which,char status);};struct led_operations *get_board_led_opr(void);#endif//led_resource.h#ifndef _LED_RESOURCE_原创 2022-01-23 22:18:18 · 322 阅读 · 0 评论 -
(5) led驱动--分层设计--具体硬件控制(通用设置、具体配置)
1.具体硬件控制---具体配置//led_resource.h#ifndef _LED_RESOURCE_H#define _LED_RESOURCE_H//bit[31:16] = group//bit[15:00] = which pin#define GROUP(x) (x>>16)#define PIN(x) (x&0xFFFF)#define GROUP_PIN(g,p) ((g<<16)|(p))struct led_resou原创 2022-01-23 16:13:22 · 233 阅读 · 0 评论 -
(4) led驱动--分层设计-添加具体硬件控制
1.led硬件控制独立层//led_opr.h #ifndef _LED_OPR_H#define _LED_OPR_H struct led_operations{ int (*init)(int which);//初始化LED int (*ctl)(int which, char status);//控制亮(1)灭(0)}; struct led_operations *get_board_led_opr(void); #endif//board_100ask_im原创 2022-01-23 10:11:30 · 692 阅读 · 0 评论 -
(3) led驱动--分层设计
1.led具体硬件控制部分//led_opr.h#ifndef _LED_OPR_H#define _LED_OPR_Hstruct led_operations{ int (*init)(int which);//初始化LED int (*ctl)(int which, char status);//控制亮(1)灭(0)};struct led_operations *get_board_led_opr(void);#endif#include <linux/.原创 2022-01-22 22:56:28 · 395 阅读 · 0 评论 -
(2) led驱动--基础版
1.led驱动例程#include <linux/kernel.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/delay.h>#include <linux/poll.h>#include <linux/mutex.h>原创 2022-01-22 19:05:52 · 667 阅读 · 0 评论 -
(1) hello驱动---不涉及硬件操作
1.linux内核API:register_chrdev函数register_chrdev()调用函数__register_chrdev()实现其功能,函数__register_chrdev()首先调用函数__register_chrdev_region()创建一个字符设备区,此设备区的主设备号相同,由函数register_chrdev()的第一个参数决定,次设备号的变化范围是0~256,设备区的名字为函数register_chrdev()的第二个参数,此函数将更改/proc/devi...原创 2022-01-22 13:04:06 · 966 阅读 · 0 评论 -
(0) linux开发驱动前环境准备
1.为什么编译驱动程序前要先编译内核:1.由于驱动程序需要用到内核文件。2.编译驱动时用的内核和开发板上用的内核要一致,编译工具链也要一致。3.更换了内核的板子,其他驱动也需要更换为用同一内核编译生成的驱动。2.编译内核镜像...原创 2022-01-18 23:26:19 · 957 阅读 · 0 评论 -
分布式版本管理工具Git的使用
37651@DESKTOP-UUQ92CT MINGW64 ~/Desktop/GitTest$ git config --global user.name "zxp"37651@DESKTOP-UUQ92CT MINGW64 ~/Desktop/GitTest$ git config --global user.email "376514883@qq.com"37651@DESKTOP-UUQ92CT MINGW64 ~/Desktop/GitTest$ git config --list.原创 2022-01-15 22:04:26 · 236 阅读 · 0 评论 -
一步一步理解Makefile
1.工程文件内容2.编译过程及运行3.makefile说明.PHONY:all clean #解析阶段执行(此行下边部分)SRCS = $(wildcard *.c) #获取当前目录下的.c文件OBJS = $(SRCS:.c=.o) #把SRCS的所有.c文件改为.o文件存入OBJSDEPS = $(SRCS:.c=.d) #把SRCS的所有.c文件改为.d文件存入OBJSBIN = mp3all: $(BIN) $(DEPS) .原创 2022-01-08 12:09:03 · 1831 阅读 · 0 评论 -
linux下动态库的生成与调用
1.动态库的生成 libdll.so2. 动态库的调用注意:需要将动态库复制到usr/lib目录下原创 2022-01-07 18:35:53 · 714 阅读 · 0 评论 -
linux下静态库的生成及调用
1.静态库生成 libmath.a2.静态库调用原创 2022-01-07 18:11:02 · 576 阅读 · 0 评论 -
一个通用Makefile
本程序的Makefile分为3类:顶层目录的Makefile 顶层目录的Makefile.build 各级子目录的Makefile1.顶层目录的MakefileCROSS_COMPILE = # 交叉编译工具头,如:arm-linux-gnueabihf-AS = $(CROSS_COMPILE)as # 把汇编文件生成目标文件LD = $(CROSS_COMPILE)ld # 链接器,为前面生成的目标代码分配地址空间,将多个目标文件链接成一个库或者一个可执行文件C转载 2022-01-03 23:29:02 · 1262 阅读 · 0 评论 -
linux下select()函数
1.I/O处理的模型有5种:1>.阻塞I/O模型在这种模型下,若所调用的I/O函数没有完成相关的功能,则会使进程挂起,直到相关数据到达才会返回。如常见的对管道、终端、网络设备进行读写时经常会出现这种情况。2>.非阻塞I/O模型在这种模式下,当请求的I/O操作不能完成时,则不让进程睡眠,而且立即返回。3>.I/O多路转接模型在这种模型下,如果请求的I/O模型阻塞,且它不是真正阻塞I/O,而是让其中的一个函数等待,在此期间,I/O还能进行其他操作;select()、p.原创 2021-12-31 17:19:16 · 2827 阅读 · 0 评论 -
linux下socket编程
socket编程的基本函数有socket()、bind()、listen()、accept()、send()、sendto()、recv()、recvfrom(),其中根据时客户端还是服务器端,或者根据使用TCP协议还是UDP协议,这些函数的调用流程都有所区别。这里先对每个函数进行说明。socket():该函数用于建立一个套接字,一条通信路线的端点。在建立了socket之后,可对sockaddr或sockaddr_in结构进行初始化,已保存所建立的socket地址信息。bind(...原创 2021-12-30 18:33:16 · 1651 阅读 · 0 评论 -
Linux下用pthread实现“生产者---消费者”的同步与互斥
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <errno.h>#include <semaphore.h>#include <sys/ipc.h>#include <string.h>#include <sys/types.h>#include <..原创 2021-12-29 21:20:26 · 666 阅读 · 0 评论 -
Linux进程间通信
1.无名管道它只能用于具有亲缘关系的进程之间的通信(父子进程或兄弟进程之间);它是一个半双工的通信模式,具有固定的读端和写端。管道也可以看成使一种特殊的文件,对于它的读写也可以使用普通的read()、write()等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。代码//pipe#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include原创 2021-12-28 16:00:24 · 916 阅读 · 0 评论 -
linux守护进程
守护进程,也是通常所说的daemon进程,是linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某些任务或等待处理某些发生的事件。通常在系统引导载入时启动,在系统关闭时终止。同时,守护进程还能完成许多系统任务。由于在linux中,每一个系统与用户交互的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到接收到某些信号...原创 2021-12-27 11:49:39 · 777 阅读 · 0 评论 -
linux多任务编程
1.fork()函数fork()函数用于从已经从在的进程中创建一个新进程。新进程为子进程,原进程为父进程。在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行,从而使两个进程分别获得其所属fork()函数的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判断是父进程还是子进程。使用fork()函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使用for原创 2021-12-26 12:24:42 · 660 阅读 · 0 评论 -
嵌入式linux串口应用编程
1.串口配置串口的配置主要是设置struct termios 结构体的各成员值,如下所示:#include<termios.h>struct termios{ unsigned short c_iflag; //输入模式标志 unsigned short c_oflag; //输出模式标志 unsigned short c_cflag; //控制模式标志 unsigned short c_lflag;原创 2021-12-25 17:57:42 · 1172 阅读 · 0 评论 -
pthread 线程创建
1.代码#include <pthread.h>#include <stdio.h>#include <unistd.h>static int my_thread_func (void *data){ while(1) { sleep(1); }}main(){ pthread_t tid; int ret; // 1.创建接收线程 ret = pthread_create(&tid, NULL,my_threa.原创 2021-12-20 21:39:54 · 1284 阅读 · 0 评论 -
tslib-1.21 的配置编译安装
1.解压后目录如下:2.配置执行命令:./configure --host=arm-linux-gnueabihf --prefix=/book@100ask:~/01_all_series_quickstart/04_嵌入式Linux应用开发基础知识/source/11_input/02_tslib/tslib-1.21$ ./configure --host=arm-linux-gnueabihf --prefix=/ checking for a BSD-compatible..原创 2021-12-19 14:48:19 · 1436 阅读 · 1 评论 -
Ubuntu下如何创建或解压 xxx.tar.xz
1.错误操作示例:执行此命令:tar xjf tslib-1.21.tar.xz 后报错如下所示,这样执行是不对的bzip2: (stdin) is not a bzip2 file.tar: Child returned status 2tar: Error is not recoverable: exiting now2.正确操作示例:2.1.先执行命令:xz -d tslib-1.21.tar.xz 结果解压出tslib-1.21.tar2.1再执行命令:tar xvf ...原创 2021-12-19 13:15:46 · 1529 阅读 · 0 评论 -
Linux版LVGL v8 底层输入配置
/** * @file evdev.c * *//********************* * INCLUDES *********************/#include "evdev.h"#if USE_EVDEV != 0 || USE_BSD_EVDEV#include <stdio.h>#include <unistd.h>#include <fcntl.h>#if USE_BSD_EVDEV#include <.原创 2021-12-15 00:21:25 · 2582 阅读 · 0 评论 -
Linux framebuffer 的mmap映射应用编程与LVGL v8 底层显示配置对比
#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <linux/fb.h>#include <fcntl.h>#include <stdio.h>#include <string.h>#include <sys/ioctl.h>static in.原创 2021-12-13 22:07:18 · 1340 阅读 · 0 评论 -
Linux内核编译 make clean与make mrproper的区别
make clean 命令是用于删除大多数的编译生成文件,但是会保留内核的配置文件.config,还有足够的编译支持来建立扩展模块。make mrproper 命令会删除所有的编译生成文件、内核配置文件(.config文件)和各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令。具体如下图所示:...原创 2021-12-04 16:49:31 · 594 阅读 · 0 评论 -
嵌入式linux上运行LVGL v8 GUI demo 支持tslib 和linux_frame_buffer
GitHub - lvgl/lv_port_linux_frame_buffer: LVGL configured to work with a standard Linux framebuffer原创 2021-08-16 23:13:07 · 3322 阅读 · 8 评论 -
/usr/bin/ld: skipping incompatible问题
现象原因:链接库文件时,库文件版本与平台版本不对应解决方法:objdump -p libmylib.a 看一下该库的版本是32为还是64位的,重新编译库搞定!原创 2021-08-13 23:52:35 · 850 阅读 · 0 评论 -
linux -shared 生成一个共享 OBJ 文件
-shared 生成一个共享 OBJ 文件,它可以和其他 OBJ 文件链接产生可执行文件。只有部分系统支持该选项。 当不想以源代码发布程序时,可以使用-shared 选项生成库文件,例如:作库文件: $ gcc -c -o sub.o sub.c $ gcc -shared -o libsub.so sub.o 以后在链接程序时,指定libsub.so 即可,比如: $ gcc -o test main.o -lsub -L /libsub.so/所在的目录/ 可以将多个文.原创 2021-01-06 23:30:13 · 293 阅读 · 0 评论 -
qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found. This appl
在ubuntu上使用qt出现报错:解决方法:1、在运行py文件前输入:export QT_DEBUG_PLUGINS=1,然后运行py程序能够查看具体错误如下:2、此处是缺少libxcb-xinerama库进行安装:sudo apt-get install libxcb-xinerama0再次执行启动...原创 2021-01-01 17:48:57 · 332 阅读 · 0 评论 -
Buildroot 的配置过程 出错
Buildroot 按如下配置过程出错错误如下:解决办法如下:原创 2020-12-30 22:13:00 · 245 阅读 · 0 评论 -
编译imx6uLL linux4.9.88的内核镜像,执行步骤 make zImage 出错
按如上操作之后,出现如下错误解决办法:原创 2020-12-29 23:26:22 · 455 阅读 · 2 评论 -
Linux内核--make mrproper与make clean的区别
首先,这两个命令都是用于删除编译内核时产生的相关文件的。两者的区别如下:make mrproper命令会删除所有的编译生成文件、内核配置文件(.config文件)和各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令。make clean命令则是用于删除大多数的编译生成文件,但是会保留内核的配置文件.config,还有足够的编译支持来建立扩展模块。所以你若只想删除前一次编译过程的残留数据,只需执行make clean命令。总而言之,make mrproper删除的范围比make cle转载 2020-12-29 22:21:55 · 394 阅读 · 0 评论 -
几种常见的ELF文件
几种常见的ELF文件在Linux下,我们经gcc编译之后生成的可执行文件属于ELF文件:ELF是一类文件类型,而不是特指某一后缀的文件。ELF(Executable and Linkable Format,可执行与可链接格式)文件格式,在Linux下主要有如下三种文件: 可执行文件(.out):Executable File,包含代码和数据,是可以直接运行的程序。其代码和数据都有固定的地址 (或相对于基地址的偏移 ),系统可根据这些地址信息把程序加载到内存执行。 可重定位文.转载 2020-10-23 15:48:13 · 950 阅读 · 0 评论 -
Linux c 开发 - Autotools使用详细解读
Autotools运行流程流程总结:1. 执行autoscan命令。这个命令主要用于扫描工作目录,并且生成configure.scan文件。2. 修改configure.scan为configure.ac文件,并且修改配置内容。3. 执行aclocal命令。扫描 configure.ac 文件生成 aclocal.m4文件。4. 执行autoconf命令。这个命令将 configur...转载 2019-10-24 14:45:27 · 190 阅读 · 0 评论 -
PC、VMware与开发板的ping问题总结
一.硬件连线有两种第一种:第二种:二.问题总结1.PC机使用网卡A连接开发板,WMware就要用同一个网卡做为桥接网卡2.windows、PC机的ubuntu、开发板三者要在同一网段3.PC有多个网卡时,多个网卡不能处于同一网段4.PC的多个网卡之间是互不联通的5.开发板运行于u-boot时用set ipaddr 192.168.xxx.xxx设置IP6...原创 2019-10-21 09:36:13 · 141 阅读 · 0 评论 -
Freeing init memory: 140K之后就停住不动了
nand scrub 格式化一下nand重新烧,搞定原创 2019-10-19 22:39:43 · 959 阅读 · 1 评论 -
JZ2440 ping不通PC主机的原因及解决办法
https://www.cnblogs.com/bxf123/p/6907227.htmlhttps://blog.csdn.net/liusirboke/article/details/468907051.卸载3602.关闭防火墙(主机,虚拟机)3.设置DNS4.PC无线网卡与本地有线网卡不要在同一网段(开发板与PC用网线连接)5.如果是虚拟机与开发板直连的话,那uboo...转载 2019-10-16 09:40:56 · 322 阅读 · 0 评论 -
构造根文件系统
1.下载配置编译busybox进入https://busybox.net/下载busybox 1.70.0tar -xjf busybox-1.70.0.tar.bz2cd busybox-1.70.0vi Makefle找到下面这句话:ARCH ?= $(SUBARCH)CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:...原创 2019-10-15 16:21:14 · 121 阅读 · 0 评论 -
分析uboot启动流程
uboot启动流程如下:1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率 5)关mmu,初始化各个bank 6)进入board_init_f()函数(初始化定时器,GPIO,串口等,划分内存区域) 7)重定位 复制uboot,然后修改SDRAM上的uboot链接地址) 8)清bss 9)跳转到board_init_r()函数,启动流程结束...转载 2019-10-12 15:54:44 · 145 阅读 · 0 评论 -
Makefile 框架
只要修改文件的头三个变量,就能用于其它工程编译,这是一个基本的 Linux 应用程序 Makefile 文件的框架# Makefile for helloEXE = mainOBJ = hello.o hello1.oSRC = hello.c hello1.cCC = gccCFLAGS = -gLDFLAGS = -L . –lFOOEXE:$(OBJ) $(...原创 2019-07-07 09:45:42 · 242 阅读 · 0 评论