自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 文件系统介绍及制作

一、文件系统介绍文件系统:是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。Linux文件系统是一个完整的统一体,组织到一个树形目录结构中。Linux遵守文件系统科学分类标准(FHS),一个定义许多文件和目录的名字和位置的标准。主要规则如下:配置文件放在/etc目录下设备文件放在/dev目录下库文件放在目录/lib目录下存放系统编译后的可执行文件、命令的目录是/bin、/sbin、/usr/bin、/usr/sbin目录在嵌入式系统中,根目录下的很多目录都可以删

2021-09-27 13:24:52 314

原创 五万字长文总结 C/C++ 知识

来自:GitHub - huihut链接:https://github.com/huihut/interview#ccC/C++ 知识总结这是一篇五万字的C/C++知识点总结,包括答案,需要的同学记得去看看。目录C/C++STL数据结构算法Problems操作系统计算机网络网络编程数据库设计模式链接装载库海量数据处理音视频其他C/C++const作用修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针和指针常量;常量引用,经常用于形参类型,即

2021-07-13 09:51:19 695 1

原创 Linux内核配置与编译

内核的配置和编译3.1解压内核$ tar xvf linux-3.14.tar.xz$ cd linux-3.14$apt-get install libncurses5-dev3.2修改内核顶层目录下的 Makefile$ gedit Makefile修改:ARCH ?= $(SUBARCH)CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)为:ARCH ?= armCROSS_COMPILE ?= arm-none-l

2021-01-11 19:19:56 491

原创 Linux系统编程基础知识

文件编程概述计算机如何帮助我们自动化完成以上操作操作系统提供了一系列的API如Linux系统:1.在Linux中要操作一个文件,一般是先open打开一个文件,得到文件描述符,然后对文件进行读写操作(或其它操作),最后close关闭文件即可。2.强调一点:我们对文件进行操作时,一定要先打开文件,打开成功后才能操作,如果打开失败,就不用进行后面的操作了,最后读写完成后,一定要关闭文件,否则会造成文件损坏。3.文件平时是存放在块设备中的文件系统文件中的,我们把这种文件叫静态文件,当我们去open打开一

2020-12-13 21:54:41 921

原创 C语言重要知识

函数:一丶形式参数和局部变量的共同点1.形式参数,作用域仅限该函数2.形式参数,也是一个变量,局部变量,有自己的内存空间空间的生存期,出生到死亡何时申请该空间:当函数被调用的适合,才申请了该内存空间,才有了这个变量,同时,这个空间内的数据被赋值成实际参数的值,函数调用把实际参数的值拷贝一份给实际参数何时释放了该空间:函数执行结束后,该空间由内存管理单元自动回收(释放)。二丶形式参数和局部变量的差异1.形式参数的数值取决于传递的数值。2.局部变量的数值是固定的3.形式参数和局部变量的地址不

2020-11-17 16:56:49 2362

原创 Socket网络编程基础

socket概述linux中的网络编程通过socket接口实现。Socket既是一种特殊的IO,它也是一种文件描述符。一个完整的 Socket都有一个相关描述{协议,本地地址,本地端口,远程地址,远程端口};每一个Socket 有一个本地的唯一Socket 号,由操作系统分配。套接字有三种类型:流式套接字(SOCK_STREAM)流式的套接字可以提供可靠的、面向连接的通讯流。它使用了TCP协议。TCP 保证了数据传输的正确性和顺序性。数据报套接字(SOCK_DGRAM)数据报套接字定义了一种无连

2020-07-31 15:46:47 402

原创 Linux字符设备驱动-树莓派IO口驱动框架

驱动俩大利器 :1.电路图:作用:通过电路图找到寄存器2.芯片手册芯片手册第六章:GPFSEL0 :寄存器配置:(input/output) GPIO Function Select 0 功能选择: 输出/输入 (GPIO Function Select Registers )32位14-12 001 = GPIO Pin4 is an output000 = GPIO Pin4 is an input引脚(置1和置0) 1高电平 0低电平GPSET0 GPIO

2020-07-20 14:34:25 210

原创 Linux线程-Mutex互斥锁和信号量互斥锁的笔记

多线程开发在 Linux 平台上已经有成熟的 pthread 库支持。其涉及的多线程开发的最基本概念主要包含三点:线程,互斥锁,条件。其中,线程操作又分线程的创建,退出,等待 3 种。互斥锁则包括 4 种操作,分别是创建,销毁,加锁和解锁。条件操作有 5 种操作:创建,销毁,触发,广播和等待。其他的一些线程扩展概念,如信号灯等,都可以通过上面的三个基本元素的基本操作封装出来。详细请见下表:线程创建API#include <pthread.h>int pthread_create(pthr

2020-07-16 21:50:52 281

原创 Linux 线程

Linux线程编程:1.线程:它是一个进程内的基本调度单位,也可呀称为轻量级进程。线程就是一条执行路径。2.特点:(1)比进程上下文切换开销小。(2)一个进程内部的多个线程,共享进程的资源和地址空间。(3)一个进程内部的多个线程,各自有自己独立的栈空间,用来存放它的返回值等。3.线程创建:pthread_create()线程的退出函数:pthread_exit() :只是所调用的函数退出,其他函数不受影响exit(0) 不管是哪个线程调用,都会让整个线程退出。等待线程结束的函数:pthr

2020-07-15 18:48:18 122

原创 exynos4412—中断处理下半部机制

起源:struct tasklet_struct{​ struct tasklet_struct *next;​ unsigned long state;​ atomic_t count;​ void (*func)(unsigned long);​ unsigned long data;};void tasklet_func(unsigned long data);6.4 调度tasklet三、按键驱动之tasklet版四、下半部机制之workqueue ----- 基于内核线程8.1 工作

2023-12-06 11:27:01 454

原创 exynos4412—中断处理

一种硬件上的通知机制,用来通知CPU发生了某种需要立即处理的事件。

2023-12-06 11:24:33 430

原创 Linux设备树

减少垃圾代码减轻驱动开发工作量驱动代码和设备信息分离参考Open Fireware设计用来记录硬件平台中各种硬件设备的属性信息。

2023-12-06 11:22:33 684

原创 内核内存管理

内核将物理内存等分成N块4KB,称之为一页,每页都用一个struct page来表示,采用伙伴关系算法维护内核地址空间划分图:3G~3G+896M:低端内存,直接映射 虚拟地址 = 3G + 物理地址​ 细分为:ZONE_DMA、ZONE_NORMAL大于3G+896M:高端内存​ 细分为:vmalloc区、持久映射区、固定映射区​ 分配方式:vmalloc:虚拟地址连续,物理地址不连续​。

2023-12-06 11:07:32 883

原创 内核定时器

硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量jiffies_64加1jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量,程序中一般用jiffiesHZ:可配置的宏,表示1秒钟产生的时钟中断次数,一般设为100或200。

2023-12-06 11:04:13 400

原创 内核定时器

硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量jiffies_64加1jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量,程序中一般用jiffiesHZ:可配置的宏,表示1秒钟产生的时钟中断次数,一般设为100或200。

2023-12-06 11:03:42 371

原创 字符设备驱动基础—并发控制

执行流:有开始有结束总体顺序执行的一段代码 又称上下文应用编程:任务上下文竞态:多任务并行执行时,如果在一个时刻同时操作同一个资源,会引起资源的错乱,这种错乱情形被称为竞态共享资源:可能会被多个任务同时使用的资源临界区:操作共享资源的代码段为了解决竞态,需要提供一种控制机制,来避免在同一时刻使用共享资源,这种机制被称为并发控制机制。

2023-12-06 11:02:51 803

原创 字符设备驱动IO模型

阻塞: 不能操作就睡觉非阻塞:不能操作就返回错误多路复用:委托中介监控信号驱动:让内核如果能操作时发信号,在信号处理函数中操作异步IO:向内核注册操作请求,内核完成操作后发通知信号。

2023-12-06 11:00:35 432

原创 字符设备驱动基础框架

分配成功后在/proc/devices 可以查看到申请到主设备号和对应的设备名,mknod时参数可以参考查到的此设备信息。每一个具体设备(次设备不一样的设备),必须有一个struct cdev来代表它。每一个具体设备(次设备不一样的设备),必须有一个struct cdev来代表它。应用层通过系统调用函数间接调用这些设备操作函数 ------- 用桩。insmod调用的init函数主要作用 --------- 钉桩。rmmod调用的exitt函数主要作用 --------- 拔桩。

2023-12-06 10:56:00 895

原创 Linux内核—模块编译方法

即新功能源码与内核其它代码一起编译进uImage文件内新功能源码与Linux内核源码在同一目录结构下给新功能代码配置Kconfig给新功能代码改写Makefilemake menuconfig 界面里将新功能对应的那项选择成启动开发板观察串口终端中的打印信息。

2023-09-14 14:43:17 774

原创 ARM接口编程—IIC总线(exynos 4412平台)

IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;

2023-09-12 14:51:25 493

原创 ARM接口编程—PWM(exynos 4412平台)

一次高低电平所占用的时间一个周期中高电平时间与整个周期的比例称为占空比。

2023-09-12 14:41:24 533

原创 ARM接口编程—RTC(exynos 4412平台)

RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电。

2023-09-12 13:54:53 466

原创 ARM接口编程—ADC(exynos 4412平台)

ADC的分辨率一般以输出二进制数的位数来表示,当最大输入电压一定时,位数越高,分辨率越高;n位的ADC能区分输入电压的最小值为满量程输入的1/2^n;比如一个12位的ADC,最大输入电压为1.8v,那么该ADC能区分的最小电压为1.8v/2。查看电路原理图可以找到ADC连在XadcAIN3引脚上。用于配置分辨率、分频值、分频器使能。用于存储转换后的数据。

2023-09-11 18:02:10 432

原创 ARM接口编程—Interrupt(exynos 4412平台)

查看按键的原理图可以看到K2接到网络标号为UART_RING,对应GPX1_1引脚。GPX1_1引脚对应的是EINT9,所以需要使能57中断号。设置GPX1_1中断触发方式为下降沿触发。使能CPU0与中断控制器之间的接口。选择由CPU0来处理57号中断。使能GPX1_1的中断功能。将对应引脚设置成中断模式。

2023-09-11 17:37:44 418

原创 ARM接口编程—WDT(exynos 4412平台)

用于设置一级分频、二级分频、使能、产生复位和中断信号。用于获取计数值,当watch dog开启时会自动递减。用于设置当前的计数值。

2023-09-11 14:08:40 181

原创 ARM接口编程—UART(exynos 4412平台)

从电路原理图上可以看到CON7连接到UART_AUDIO_TXD和UART_AUDIO_RXD,最后连接到芯片的GPA1_0和GPA1_1引脚上。

2023-09-08 18:23:58 515

原创 ARM接口编程—GPIO(exynox 4412平台)

GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能。

2023-09-08 18:05:04 358

原创 Bootloader概述和Uboot

u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。遵循GPL条款。从FADSROM、8xxROM 、PPCBOOT、Armboot逐步发展演化而来;当前版本号:参考Makefile。

2023-09-07 10:50:34 1676

原创 [C++] Lambda表达式

/ 函数体int x = 10;// 输出50。

2023-09-05 18:07:49 240 1

原创 C++智能指针介绍与使用

智能指针是一种 C++ 标准库中的模板类,用于管理动态分配内存资源。它们提供了自动化的内存管理功能,可以帮助程序员在避免内存泄漏和野指针的同时,简化内存资源的手动释放。C++ 标准库中提供了三种主要的智能指针:std::shared_ptr、std::unique_ptr 和 std::weak_ptr。

2023-08-31 10:42:04 73

原创 C++提高编程

学习目标:vector中存放自定义数据类型,并打印输出//自定义数据类型public:mAge = age;//存放对象//创建数据it!= v.end();it++) {//放对象指针//创建数据it!= v.end();test02();return 0;

2023-08-30 17:52:03 151

原创 Makefile介绍与使用

FOO?= barFOO = barendifAR:库文件维护程序的名称,默认值为ar。AS汇编程序的名称,默认值为asCC:C编译器的名称,默认为cc。CPP C预编译期的名称,默认值为$(CC) -E。CXX: C++编译器的名称,默认值为g++。FC:FORTRAN编译器的名称,默认值为f77RM:文件删除程序的名称,默认值为 rm -r。

2023-08-30 12:09:59 115

原创 ubuntu、开发板和PC网络互通

VMware Ubuntu18.04参考如下博文https://blog.csdn.net/killercode11/article/details/106798676

2022-07-13 16:10:40 397 1

原创 Ubuntu 18.04搭建NFS服务器

NFS 即网络文件系统(Network File-System),可以通过网络让不同机器、不同系统之间可以实现文件共享。通过 NFS,可以访问远程共享目录,就像访问本地磁盘一样。NFS 只是一种文件系统,本身并没有传输功能,是基于 RPC(远程过程调用)协议实现的,采用 C/S 架构。三、添加 NFS 共享目录添加如下内容新建“/share”目录,并为该目录设置最宽松的权限:四、重启 NFS 服务五、开发板挂载 Ubuntu NFS目录① 首先确定 Ubuntu 可以上网,然后将开发板联网,

2022-07-13 16:06:09 1457

原创 【SSD20X平台Linux应用开发】串口应用编程

UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),简称串口。UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。串口在嵌入式中用途非常的广泛,主要的用途有:串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线通过TxD->RxD把ARM开发板要发送的信息发送给PC机。通过RxD->TxD线把PC机要发送的信息发送给ARM开发板。最下面

2022-07-12 14:40:09 458

原创 【SSD20X平台Linux应用开发】watchdog使用demo

Watchdog 采用标准的linux 框架,提供硬件的watchdog,上层应用可以设定time out时间,自己来keep alive。Watchdog默认是关闭的,可自行决定是否开启。开启建议在主线程中操作,如果在其他线程中操作,watchdog会随着线程的关闭而关闭。打开/dev/watchdog设备,watchdog将被启动。参考代码如下:2.1.2. 关闭Watchdog¶参考代码如下:i2.1.3. 设定timeout通过标准的IOCTL命令WDIOC_SETTIMEOUT,来设定ti

2022-07-08 12:09:52 455

原创 Linux FrameBuf介绍

fbdev用于为显示图形硬件提供一层软件抽象.它代理了显示图形硬件的帧内存,并且提供了一些良好定义的接口让应用软件去访问图形硬件,而不用去关心底层图形硬件的具体控制细节。访问fbdev通常通过一些特定的设备节点,例如位于/dev目录下的 /dev/fb*.一个简单的framebuffer 使用场景:3个application 通过fb0这个fb device 节点对framebuffer进行修改,然后由图形硬件将修改之后的内容输出到显示端fbdev 目前是一个字符设备,首设备号29,尾设备号标志frame

2022-06-22 10:15:07 1590

原创 C++核心基础知识

内存四区意义:不同区域存放的数据,赋予不同的声明周期,给我们更大的灵活编程在程序编译后,生成了exe可执行文件,未执行该程序前分为两个区域。代码区:全局区:栈区:注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放堆区:new运算符在堆区开辟数据堆区开辟的数据,由程序员手动开辟,手动释放,释放用delete语法:利用new创建的数据,会返回该数据对应类型的指针引用基本使用作用:给变量起别名语法:数据类型 &别名 = 原名注意事项引用必须初始化——告诉它它是谁的别名引用在初始化

2022-06-16 10:08:07 604

原创 程序的内存模型-内存四区详解

1.1程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域代码区:存放CPU执行的机器指令代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令全局区:全局变量和静态变量存放在此.全局区还包含常量区,字符串常量和其他常量卫存放在此.该区域的数据在程序结束后由操作系统释敖1.2程序运行后栈区:由编译器自动分配释放,存放函数的参数值,局部变量等注意事项:不要返回局部变量的地址,栈区

2022-05-05 13:52:55 575

原创 使用带有 LVGL 的 Linux 帧缓冲设备的嵌入式 GUI

LVGL简介LVGL 是一个针对资源有限的微控制器的图形库。但是,可以使用它来创建带有运行 Linux 操作系统的高端微处理器和板卡的嵌入式 GUI。最知名的处理器内核是 ARM Cortex A9(例如NXP i.MX6)和 ARM Cortex A53(例如Raspbery PI 3)。你可以通过简单地使用 Linux 的帧缓冲设备(通常是 /dev/fb0)在这台单板计算机上创建嵌入式 GUI。获取项目源码git clone https://github.com/lvgl/lv_port_lin

2022-04-18 14:18:21 1977

空空如也

空空如也

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

TA关注的人

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