自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 华为产品测评官-开发者之声 - ModelArts产品体验

本期活动有机会使用并评估华为多个产品,包括华为云CodeArts,华为云ModelArts,鲲鹏DevKit,昇腾CANN,昇思MindSpore。无论您是初次接触还是经验丰富的开发者,都将在产品体验和反馈中找到乐趣,同时有机会为产品的改进提出自己的建议。作为“产品测评官”,您的反馈和建议将直接影响华为开发者产品的优化方向。让我们一起参与,为全球开发者提供更优质的产品体验,发出你的开发者之声!根据文档操作没什么难度,可能就有点费眼睛(这是每个IT相关从事人员不可避免的)。

2023-08-05 14:13:33 194 3

原创 QT基本介绍

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GU程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Qbject Compiler,mac))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

2023-07-27 15:57:18 228

原创 Linux中的mmap和ioremap的区别

linux中的ioremap和mmap都是用于linux内存映射的函数,但它们的作用和使用场景有所不同。

2023-07-27 14:57:21 534 1

原创 argc和argv怎么使用

一种常见的情况是,argc是命令行参数的个数,rgv[0], argv[1]……argv[argc-1]都是指向string的指针,这些string就是命令行中的各个参数。2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[][] ,argv是一个指针数组)argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog。argv[1]和argv[2]则分别是指向"a"和"bc"起始字符的指针。假设程序的名称为prog,

2023-07-27 14:55:44 295 1

原创 Linux信号发送函数kill()和raise()

kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口)。

2023-07-27 14:50:41 86

原创 DRM驱动框架

传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制。在这样的背景下,DRM应用而生。DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和GPU计算等工作。是 Linux 内核对显示框架进行分层设计的思想,相较于直接操作 Framebuffer,DRM 框架提供了更多的功能。

2023-07-27 14:36:21 926

原创 dtbo镜像文件

DTBO镜像文件,全称为“Device Tree Binary Overlay”,即设备树二进制叠加层。该文件是Android Pie中在硬件兼容性方面的重大变化,它可以将设备树中的参数动态加载而不需要重新编译内核。它充分利用了设备树的优点与灵活性,避免了修改设备树的不必要麻烦,同时又不失灵活性,并且在内存使用上相比Device Tree Blob(DTB)更为优秀。

2023-07-26 13:15:59 649

原创 交叉编译器

在 X86 架构 Linux 系统下进行 C 程序开发时, 我们使用系统的 gcc 编译器进行代码的编译, 编译生成的可执行程序直接在 X86 架构下的 PC 下运行的,这个过程叫做 本地编译 (Native Compile)。而如果该C程序想要编译出来后放到ARM处理器架构的系统上运行, 则需要在 X86 架构Linux系统下使用支持 ARM 的编译器编译, 这个编译器我们通常称为 交叉编译器 (Cross Compiler)。

2023-07-25 15:31:57 74

原创 设备树小知识

4.返回Linux源码根本目录下 ~/imx6ull/bsp/kernel/linux-imx,执行make dtbs会编译igkboard.dtb和overlay下的i2c_sht20.dts生成i2c_sht20.dtbo。2.然后在~/imx6ull/bsp/kernel/linux-imx/arch/arm/boot/dts/overlays下vim 一个xxx.dts文件,保存退出。1.现在igkboard.dtb设备树下添加设备和设备节点。3.在overlays文件夹下的Makefile添加。

2023-07-24 15:59:30 106

原创 SPI子系统—ecspi驱动

唯一要说明的是第二个成员“spi”,它是一个spi_device类型的指针,我们讲解spi_device结构体时说过,一个spi设备对应一个spi_device结构体,这个成员就是用于指定消息来自哪个设备。ecspi总线驱动由NXP官方编写,ecspi设备驱动需要我们根据实际连接的设备编写对应的驱动,例如spi接口的oled屏,spi接口的外置AD转换新芯片等等。对比i2c设备的注册和注销函数,不难发现把“spi”换成“i2c”就是i2c设备的注册和注销函数了,并且用法相同。

2023-07-24 13:47:10 457

原创 i2c子系统—i2c驱动框架

然后,主设备释放SDA线,等待从设备的应答信号(ACK)。i2c总线包括i2c设备(i2c_client)和i2c驱动(i2c_driver), 当我们向linux中注册设备或驱动的时候,按照i2c总线匹配规则进行配对,配对成功,则可以通过i2c_driver中.prob函数创建具体的设备驱动。我们知道一个i2c上可以挂在多个i2c设备,例如sht20、i2c接口的OLED显示屏、摄像头(摄像头通过i2c接口发送控制信息)等, 这些设备共用一个i2c,这个i2c的驱动我们称为i2c总线驱动。

2023-07-21 16:54:14 639 1

原创 中断处理—上、下半部分

Linux中断我们需要知道两点:1、 Linux中断与中断之间不能嵌套 2、中断服务函数运行时间应当尽量短,做到快进快出。

2023-07-21 13:06:48 498 1

原创 中断子系统-内核定时器

*定时器超时时间,单位是节拍数*/ void(* function)(struct timer_list *);/*定时处理函数*/ u32 flags;# endif };struct/*定时器超时时间,单位是节拍数*/ void(* function)(struct timer_list *);/*定时处理函数*/ u32 flags;# endif };/*定时器超时时间,单位是节拍数*/ void(* function)(struct timer_list *);

2023-07-19 16:44:18 55

原创 Pinctrl子系统-gpio子系统-ioctl接口

imx6ull.dtsi这个文件是芯片厂商官方将芯片的通用的部分单独提出来的一些设备树配置。在iomuxc节点中汇总了所需引脚的配置信息,pinctrl子系统存储使用着iomux节点信息。我们的设备树主要的配置文件在~kernel/linux-imx/arch/arm/boot/dts/imx6ull-myir-mys-6ulx.dtsi 中,在文件中搜索“&iomuxc”找到设备树中引用“iomuxc”节点的位置如下所示。

2023-07-18 10:51:20 157 1

原创 华为产品测评官-开发者之声 - CodeArts产品体验

本期活动有机会使用并评估华为多个产品,包括华为云CodeArts,华为云ModelArts,鲲鹏DevKit,昇腾CANN,昇思MindSpore。无论您是初次接触还是经验丰富的开发者,都将在产品体验和反馈中找到乐趣,同时有机会为产品的改进提出自己的建议。作为“产品测评官”,您的反馈和建议将直接影响华为开发者产品的优化方向。让我们一起参与,为全球开发者提供更优质的产品体验,发出你的开发者之声!

2023-07-17 15:41:28 7284 2

原创 Linux设备树(Linux Device Tree)

设备树:是一种描述硬件的数据结构,Linux3.x以后的版本才引入了设备树,不是将设备的每个细节都硬编码到操作系统中,而是可以在引导时传递给操作系统的数据结构中描述硬件的许多方面。设备树由OpenFirmware、OpenPOWER抽象层(OPAL)、电源架构平台需求(PAPR)和独立的扁平设备树(FDT)形式使用。在早些的linux内核,这些“硬件平台的板级细节”保存在linux内核目录“/arch”,

2023-07-17 15:01:45 3465 1

原创 Linux设备驱动开发-platform总线

在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于总线。也就是说在嵌入式CPU中,访问外设跟访问内存是一样的。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_device,而驱动成为 platform_driver。物理总线:芯片与各个功能外设之间传送信息的公共通信干线,其中又包括数据总线、地址总线和控制总线,以此来传输各种通信时序。驱动总线:负责管理设备和驱动。

2023-07-17 13:32:52 526 1

原创 Linux设备驱动开发(字符设备2)

系统调用会通过中断或陷阱的方式进入内核,进而调用相应的驱动程序来实现对硬件设备的访问或特权操作的执行。这些数据结构也是内核中的重要组成部分,驱动程序需要与这些数据结构进行交互以完成相应的操作。其中,由于内核空间与用户空间的内存不能直接互访,因此借助函数copy_to_user()完成内核空间到用户空间的复制,函数copy_from_user()完成用户空间到内核空间的复制。Linux内核驱动和系统调用之间有着紧密的联系,这是因为系统调用是用户空间程序与内核交互的接口,而驱动程序则是内核中与硬件交互的接口。

2023-07-16 11:09:45 84 1

原创 Linux设备驱动开发(字符设备1)

在MCU开发编程中,硬件的设备驱动是我们自己写的,在代码中由我们自己去调用它,每个人的写法不同,并没有统一的规范。但是在Linux下的驱动编写,于MCU不同,它有严格的编写规范,哪些该做什么内容都是有严格的要求。BSP开发:一般来说开发流程,初始化CPU、内存这些是第一步,然后是串口、shell、文件系统也要起来,然后就是根据需求是否要调一些基本的驱动了。负责板级支持包的开发、调试和维护工作。

2023-07-15 16:16:54 254 1

原创 Linux下的hello驱动开发

学习内核编程的最简单的方式也许就是写个内核模块:一段可以动态加载进内核的代码。模块所能做的事是有限的——例如,他们不能在类似进程描述符这样的公共数据结构中增减字段(LCTT译注:可能会破坏整个内核及系统的功能)。但是,在其它方面,他们是成熟的内核级的代码,可以在需要时随时编译进内核(这样就可以摒弃所有的限制了)。完全可以在Linux源代码树以外来开发并编译一个模块(这并不奇怪,它称为树外开发),如果你只是想稍微玩玩,而并不想提交修改以包含到主线内核中去,这样的方式是很方便的。

2023-07-15 13:17:37 230 1

原创 Linux驱动开发入门(内核态用户态)

确认你的环境:确保你正在使用一台运行Linux操作系统的计算机。对于驱动程序开发,最好是选择一个具备良好的硬件支持和最新内核版本的Linux发行版。了解设备驱动程序的类型:在Linux中,驱动程序通常分为字符设备驱动和块设备驱动两种类型。字符设备驱动用于处理像终端、键盘等字符流的设备,而块设备驱动用于处理像硬盘、固态驱动器等块数据的设备。学习Linux设备模型:Linux内核采用一种称为设备模型的框架来管理和表示设备。学习如何在设备模型中注册设备、分配和释放资源以及与设备进行交互是非常重要的。

2023-07-12 11:18:58 1107 2

原创 uint8_t数据类型

uint64_t ,16字节无符号整数。uint16_t ,2字节无符号整数。uint32_t ,8字节无符号整数。uint8_t ,1字节无符号整数。

2023-07-03 20:03:52 1282 1

原创 如何构建linux根文件系统

根文件系统(“/”)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以安装各种软件包。在linux系统中,目录(文件)的名字表示了该目录(文件)的含义,指定了该目录应该存放什么内容。(因此在linux系统中,目录的命名非常重要。

2023-07-02 00:14:20 938 2

原创 Linux操作系统的基础知识

这是一篇关于关于嵌入式Linux操作系统知识点的文章,希望通过此,大家能温故了解Linux和嵌入式的知识点概念。

2023-07-02 00:10:42 369 1

原创 初识C语言和程序设计

一组计算机能识别和执行的指令集合程序和程序设计的概念;什么是计算机语言,计算机语言的发展阶段(机器语言汇编语言高级语言);C语言的发展,C语言的主要特点;通过几个例子,说明C程序的基本结构及特点,内容包括:main()函数,预处理指令,输出函数与输出格式控制,语句,注释,变量的声明与赋值,函数的声明、定义与调用,输入函数与输入格式控制等;

2023-07-02 00:03:12 74 1

原创 ADC之MQ-2烟雾传感器

MQ-2烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SNo2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2烟雾传感器对液化气、丙烷、氢气、烟雾的灵敏度较高,对天然气和其它可燃蒸汽的检测也很理想,故因此,MQ气体传感器可以准确来说是一个多种气体探测器,它的优点:灵敏度高、响应快、稳定性好、寿命长、驱动电路简单和性价比高,有模拟和数字信号输出两种选择。

2023-07-01 23:14:14 9228

原创 一线协议之DS18B20工作原理及工作步骤

DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。[1]DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。

2023-06-26 18:20:27 4457 5

原创 C语言实现链表创建

对链表的认识和理解,链表的一些基础知识,C语言用尾插法创建链表。

2023-06-01 16:24:00 8514 5

空空如也

空空如也

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

TA关注的人

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