自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嵌入式Linux开发

专注于嵌入式Linux下的内核、驱动和系统软件开发。

  • 博客(370)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux内核同步机制原子操作

微信公众号『嵌入式 Linux 开发』作者,专注于嵌入式 Linux 下的内核、驱动和系统软件开发,专注于基础知识和项目实战分享。Linux内核同步机制原子操作。

2023-05-27 14:30:07 283 1

原创 Linux内核模块加载深度剖析(上篇)

微信公众号『嵌入式 Linux 开发』作者,专注于嵌入式 Linux 下的内核、驱动和系统软件开发,专注于基础知识和项目实战分享。上篇主要介绍了模块文件从用户空间拷贝到内核空间的过程,从busybox源码开始一直到Linux内核源码。关注“嵌入式Linux开发”,持续更新更多嵌入式Linux开发方面的知识。

2023-05-24 09:00:00 548 12

原创 ChatGPT 真能上天入地?无所不能?

微信公众号『嵌入式Linux开发』作者,专注于嵌入式Linux下的内核、驱动和系统软件开发,专注于基础知识和项目实战分享。任何新技术的发展都会带来社会的变革和发展,同时也会带来机遇和挑战,ChatGPT作为人工智能领域厚积薄发的代表,一经推出立刻在全世界引起了广泛关注,随着商业技术应用和场景的不同落地体验,一定会有更多的ChatGPT公司涌现,也会有大批的公司因为发展和商业落地的问题而倒下,这些都是新技术发展的必经之路。关注“嵌入式Linux开发”,获取更多的基础知识和项目实战经验。

2023-05-22 21:39:12 258

原创 万事开头易,先来了解一下我们心心相印的 Linux 内核

微信公众号『嵌入式Linux开发』作者,专注于嵌入式Linux下的内核、驱动和系统软件开发,专注于基础知识和项目实战分享。Linux是一种开源的操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰大学生Linus Torvalds于1991年开发的一款全新的操作系统。那时,作为芬兰赫尔辛基大学的一名学生的linus,正为不能随心所欲使用强大而自由的Unix系统而苦恼。

2023-05-21 12:26:53 102 1

原创 12. Linux命令必知必会之mkdir命令

mkdir命令用于创建目录。

2023-05-20 16:46:14 128

原创 11. Linux命令必知必会之touch命令

touch命令可以用于创建原来并不存在的空文件,也可以用于改变文件的时间属性,可以改变文件的最后访问时间和最后修改时间。

2023-05-20 16:45:29 264

原创 10. Linux命令必知必会之mv命令

mv命令用于移动或重命名文件或目录,可以将源文件或源目录改名为目标文件名,或者将一个或多个源文件移动到同一个目录。

2023-05-18 19:01:55 80

原创 9. Linux命令必知必会之dd命令

dd命令可以根据用户输入的选项,在复制文件时对文件的内容进行转换和格式化处理。

2023-05-17 19:57:27 881

原创 8. Linux命令必知必会之cp命令

cp命令用来复制源文件或目录到目的文件或目录。

2023-05-17 19:28:34 146

原创 7. Linux命令必知必会之chown命令

chown命令用于改变指定文件的所有权包括所有者和组,如果要同一个目录下的多个文件的所有权,可以通过使用“-R”选项一次性修改完成所有文件。

2023-05-16 19:24:36 238

原创 6. Linux命令必知必会之chmod命令

chmod命令按照指定的权限模式修改文件的权限chmod支持两种权限模式:字符标记法和数字标记法字符标记法的语法格式为:[ugoa] [±=] [rwxXstugo]

2023-05-16 09:00:00 195

原创 IT从业者如何保命

只有这样才能预防猝死出现,如果我们脾气比较暴躁,经常发火,这时的血压就会有很大的波动,容易导致猝死出现。而面对每天长时间的端坐不动,想要保持挺胸抬头良好的坐姿,避免腰椎间盘突出,腰靠就是最关键的了,腰靠是为了弥补椅子本身的腰部支撑不足,想怎么支撑就怎么支撑。积极的锻炼可以增加体内脂肪的燃烧和热量消耗,防止脂肪过多的储存,可以提高心肌功能,增强心脏的应激能力,以适应各种不同条件的不同因素的刺激。要保持眼睛与工作屏幕平齐,可以用可调节高度的座椅,也可以用可任意调节的屏幕支架,总之要保持身体处于最舒服的状态。

2023-05-15 23:18:12 37

原创 5. Linux命令必知必会之chgrp命令

chgrp命令用于改变指定文件或目录所属的群组。

2023-05-15 19:04:53 266

原创 八、Linux后台服务程序开发(3)

InitSocket函数实现创建TCP服务监听socket,并通过setsockopt函数设置socket地址端口属性为可以重复绑定,这样当socket关闭后bind函数可以绑定释放的地址端口而不报错。Bind函数首先初始化sockaddr_in结构体,赋值端口号和IP地址,然后通过bind函数实现socket套接字和sockaddr_in结构体的绑定。Close函数用于关闭已经打开的监听socket套接字和和客户端通信用的socket套接字。

2023-05-15 09:30:00 47

原创 4. Linux命令必知必会之ls命令

ls命令可以根据用户指定的选项,以各种方式显示文件的信息或目录的内容,是Linux系统下经常使用的命令。

2023-05-14 08:10:53 66

原创 3. Linux命令必知必会之cd命令

cd命令用于切换当前目录到指定的目录,cd命令是我们平时工作中在Linux操作系统中使用频率最高的命令之一。

2023-05-13 20:05:42 478

原创 2. Linux命令必知必会之pwd命令

pwd命令用于显示用户当前工作目录的绝对路径,pwd始终以绝对路径的方式打印工作目录,即从根目录(/)开始到当前目录的完整路径。在实际工作中,我们常常记不起当前目录的完整路径,此时pwd命令就派上用场了。

2023-05-13 18:11:43 505

原创 1. Linux命令必知必会之basename命令

basename命令用于去掉文件名的目录和后缀。

2023-05-13 08:49:59 568

原创 八、Linux后台服务程序开发(2)

8.4 buffer缓存设计buffer.hpp是缓存数据的buffer队列的实现文件,buffer队列主要考虑是通过预先分配好的内存来减少使用过程中申请内存对时间的浪费。buffer的构造函数通过malloc函数每次向系统申请RECV_BUF_SIZE大小的内存空间作为缓存使用,总共申请BUFFER_COUNT个RECV_BUF_SIZE大小的内存,buffer的析构函数会通过free函数释放申请的内存空间push函数首先获取buffer队列的尾指针,然后判断buffer队列是否已经满了,如果没有通

2023-05-12 19:41:20 90

原创 八、Linux后台服务程序开发(1)

broadcast.hpp是广播代码实现,InitSocket函数完成UDPsocket套接字的初始化,首先创建socket fd,然后初始化address结构体并绑定端口号8888,然后打开sd卡内存有广播起始IP地址的文件,最后获取板卡wifi芯片的IP地址和MAC物理地址。Close函数用于关闭已经打开的socket fd,关闭已经打开的文件描述符fd,SendBRD函数用于获取sd卡里面文件的IP地址,并向该IP地址发送板卡的wifi芯片的IP地址和MAC物理地址。

2023-05-11 11:00:00 317

原创 七、Linux设备驱动开发(4)

FPGA设备驱动卸载函数,通过platform_get_drvdata函数获取设备驱动结构体,通过free_irq释放已经申请的中断号,通过devm_iounmap解除寄存器地址的映射,通过device_destroy释放申请的设备节点,通过class_destroy释放申请的class类设备节点。

2023-05-10 10:30:00 54

原创 七、Linux设备驱动开发(3)

接着通过解析设备树文件获取FPGA寄存器的首地址并将首地址物理地址映射成虚拟地址,获取设备树中的FPGA设备驱动中断号,将FPGA写入数据的DDR的物理地址映射成虚拟地址,将FPGA设备驱动结构体加入内核device结构体的私有数据空间,通过request_irq函数向内核申请中断,并绑定中断处理函数和中断触发模式。接着初始化字符设备结构体,绑定字符设备操作函数结构体并将字符设备添加进内核空间,创建class类设备节点,创建device驱动设备节点。接着初始化内核等待队列头,申请内核fifo内存空间。

2023-05-09 23:36:09 46

原创 七、Linux设备驱动开发(2)

FPGA设备驱动数据写入函数,将用户空间函数读到的倾角传感器数据和GPS传感器数据写入FPGA指定的寄存器地址空间,FPGA会将这些传感器数据和其它传感器数据以及线阵相机数据按一定的格式共同组成完整的一帧数据。打开FPGA设备驱动函数,主要完成FPGA地址空间配置,线阵相机写触发间隔设置,线阵相机曝光精度设置,输出图像内容设置,线阵相机工作模式设置,线阵相机触发时间设置,最后使能FPGA逻辑开始进行数据采集。FPGA设备驱动数据据读取函数,将FPGA组好的数据帧从内核空间传输到用户空间。

2023-05-09 10:00:00 41

原创 七、Linux设备驱动开发(1)

新建fpga_driver目录用于存放fpga设备驱动代码,并将已经编写好验证过的fpga设备驱动源代码文件拷贝到fpga_driver目录。编写FPGA设备驱动Makefile文件用于自动编译fpga驱动代码文件,Makefile内容如下。使能FPGA逻辑,通过向FPGA提供的寄存器写入1通知FPGA开始工作,开始采集相机和传感器数据。以上内容都是一些驱动中定义的可以修改的参数,可以在驱动加载的时候给不同的参数指定不同的值。编写fpga设备驱动源文件fpga_driver.c,内容如下。

2023-05-08 09:30:00 88

原创 六、devicetree移植

修改zynq-7000.dtsi文件,增加fpga驱动设备节点,compatible对应的字符串是个人命名的匹配字符串,要和驱动中的匹配,reg对应的是fpga分配的寄存器首地址,interrupts对应的是fpga分配的中断号。修改system-top.dts文件,包含pl.dtsi,增加serial1和serial2节点,serial1连接的是GPS,serial2连接的是倾角传感器。新建pl.dtsi文件,内容如下,主要是添加了倾角传感器驱动,倾角传感器是通过uart来进行控制的。

2023-05-07 09:01:11 51

原创 五、根文件系统移植(2)

将ntfs-3g_ntfsprogs-2017.3.23.tgz文件拷贝到ubuntu14.04,ntfs3g库是为了在Linux系统下支持NTFS文件系统,Linux文件系统下默认是不支持NTFS文件系统的,需要通过添加开源库ntfs3g来支持NTFS文件系统。将系统/lib/modules目录下的3.17.0-xilinx目录拷贝到根文件系统下的lib/modules目录下,并删除不需要的3.6.0目录。将编译ntfs3g库生成的目标库文件拷贝到根文件系统的usr/lib目录下。

2023-05-06 15:19:54 66

原创 五、根文件系统移植(1)

在hostapd目录下新建两个目录libnl-1.1和openssl-1.0.1c,将之前编译完成后生成的libnl目标目录和openssl目标目录分别拷贝到libnl-1.1和openssl-1.0.1c目录下。修改Makefile文件,首先删除-m64相关的条目,-m64是针对64位二进制码的,如果不注释掉,在当前的编译环境下会报错。移植libnl-1.1,libnl库是hostapd库所依赖的,hostapd库是wifi热点会用到的。out目录下就是编译完成后生成的头文件和库文件。

2023-05-05 21:22:43 80

原创 四、kernel移植

配置修改完成后重新编译kernel,arch/arm/boot/目录下的uImage文件就是需要的内核文件。修改drivers/net/wireless/bcmdhd/Kconfig,修改固件和配置文件路径。配置kernel,先对kernel进行清理,然后基于zynq的基础配置生成.config配置文件。至此,kernel的修改配置编译完成了,主要是根据自己的项目需要添加无线和驱动支持。修改支持的ramdisk文件系统的大小。修改支持的压缩格式,去掉XZ压缩。添加80211配置支持。按空格键选中箭头所指。

2023-05-04 20:17:40 52

原创 三、u-boot移植

配置u-boot,zynq_zc702_defconfig是官方提供的zc702开发板的配置文件,由于我们的硬件也是基于zynq7020进行开发的,和zc702比较相似,所以这里以zc702的配置文件进行u-boot配置。u-boot-xlnx是xilinx官方维护的u-boot源码,本来应该从xilinx官方地址进行下载,由于速度比较慢,所以这里选择了从国内镜像网站进行下载。编译u-boot,利用之前搭建好的u-boot编译环境对u-boot进行编译。git工具是非常好用的版本管理工具和下载工具。

2023-05-03 08:57:58 85

原创 二、项目介绍

主处理器用的是xilinx公司生产的xc7z020CLG484,该芯片是属于xilinx公司的zynq系列。wifi芯片用的是AP6181,支持wifi热点功能,通过zynq处理器的sdio接口引出。GPS芯片用的是ATGM336H-5N,通过zynq处理器的UART接口引出。USB芯片用的是USB3320,支持USB2.0协议线阵相机芯片用的是DS90CR288AMTD,通过FPGA进行连接并采集相机的数据。拉绳传感器用的是MPS-XS-300mm-V1,通过ADS1118接入FPGA。

2023-05-01 19:08:09 178

原创 一、环境搭建(2)

VMwareTools可以方便windows系统和linux系统之间拷贝文件,可以直接通过鼠标拖拽的方式将需要传递的文件从Windows系统拷贝到Linux系统。配置环境变量,将交叉编译工具链导出,打开文件/etc/bash.bashrc在最后添加一行。配置环境变量,将交叉编译工具链导出,打开文件/etc/bash.bashrc在最后添加一行。通过命令行进入上图文件所在的目录/media/test/VMare Tools/执行如下命令,可以看到交叉编译工具命令已经生效。此编译工具用于编译u-boot。

2023-04-29 07:46:17 43

原创 一、环境搭建(1)

开发环境搭建

2023-04-28 18:16:58 59

原创 Makefile实战之八Makefile中的伪目标

8.1 伪目标伪目标不代表真正的文件名,执行make时可以指定这个目标来执行其所在规则定义的命令为了便于对已经编译好的工程进行清理,安装等,我们一般会在Makefile文件中定义如下:clean: $(RM) *.o target然后通过make命令显示地执行:make clean由于我们并不生成clean这个文件,clean只是一个标签,make无法生成它的依赖关系和决定它是否要执行,所有要通过make命令显示地执行这个目标:make clean但是如果Makefile当前目录下有一个和c

2022-01-10 20:01:36 991

原创 Makefile实战之七Makefile中的目录搜索

7.1 一般搜索通过变量VPATH指定搜索路径,不同路径之间用冒号或空格分开:VPATH = src:../include7. 2 选择性搜索通过关键字vpath实现选择性搜索使用方法:vpath PATTERN DIRECTORIESPATTERN为模式,用模式字符%来匹配一个或多个字符。DIRECTORIES为搜索目录vpath %.h …/include 如果.h文件在当前目录下没有,则到…/include目录下去寻找,这里的.h文件并不包含源文件中包含的头文件所在的路径v

2022-01-10 19:29:05 482

原创 Makefile实战之六Makefile中的通配符

更多学习资料:https://mp.weixin.qq.com/s?__biz=Mzg5MDU3NjUyNA==&mid=2247483665&idx=1&sn=2dbdfeeb3de79c17b281c6e9aae07655&chksm=cfdbcaf2f8ac43e4bebe0a867a55cbd9695ba322259a978bfa50635fd88fdc4c37146685b7d3#rdMaekfile中表示文件名时可使用通配符,Makefile中的通配符用法和含义

2022-01-09 16:07:32 1192

原创 Makefile实战之五Makefile中的函数

5.1 subst函数其格式如下:$(subst <from>,<to>,<text>)subst函数实现把字符串 中的 字符串替换成字符串$(subst ee,EE,feet on the street) 把feet on the street 中的ee 替换成EE ,返回结果是fEEt on the strEEt5.2 patsubst函数其格式如下:$(patsubst <pattern>,<replacement>,&

2022-01-09 12:42:43 210

原创 Makefile实战之三Makefile规则

3.1 隐含规则隐含规则是编译工程的一个非常高效的手段,为编译大型工程提供了简便使用make内嵌的隐含规则,在Makefile中就不需要明确给出重建某一个目标的命令,甚至可以不需要规则。make会自动根据已存在(或者可以被创建)的源文件类型来启动相应的隐含规则foo : foo.o bar.o cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) 3.2 常用隐含规则编译C程序N.o自动由N.c生成,执行的命令为$(CC) -c $(CPPFLAGS)

2022-01-08 20:04:49 288

原创 Makefile实战之四Makefile变量

4.1 Makefile中的变量Makefile中的变量相当于C语言中的宏变量,变量名称是区分大小写的,变量在声明时需要给予初值,使用时在变量名前加上$ 符号,但最好用小括号() 或是大括号{} 把变量给包括起来。如果你要使用$ 字符,要用$$ 来表示4.2 变量的命名规范当变量用来表示命令行上或环境中的常数时,全部以大写字母编写,单词之间以下划线( _ )隔开;Makefile文件中出现的内部变量或函数中使用的变量,全部以小写编写,单词之间以破折线( - )隔开;4.3 变量的赋值类型

2022-01-07 22:06:29 786

原创 Makefile实战之二make介绍

1. make到底是什么make是一个自动化编译命令工具,它通过读取一个名为Makefile的特殊文件,来决定如何对源代码文件进行编译和链接;make通过比较对应文件(规则的目标和依赖)的最后修改时间,来决定哪些文件需要更新,哪些文件不需要更新;说到底make就是用来解析并执行Makefile文件中定义的规则和命令,并最终生成我们需要的文件;2. make的工作原理make会根据源代码文件和目标文件的最后修改时间来决定哪些文件需要重新编译,如果所有的源代码文件都没有被编译过,则对各个源代码文

2022-01-01 12:55:39 360

原创 Makefile实站之一预备知识

1. Linux下程序的编译过程在Linux系统下,要生成最终的可执行程序,需要经过以下几个步骤:#mermaid-svg-Cd06fMLOfgzMLtEE .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Cd06fMLOfgzMLtEE .label text{fill:#333}#mermaid-svg-

2022-01-01 12:47:28 189

Linux内核源码树介绍

Linux内核源码树介绍

2023-05-23

ChatGPT 真能上天入地?无所不能?

ChatGPT 真能上天入地?无所不能?

2023-05-22

万事开头易,先来了解一下我们心心相印的 Linux 内核.md

内核编程

2023-05-21

freescale P2020

详细介绍了freescale P2020处理器的启动过程。对于致力于开发P2020的研发人员有一定的帮助。

2013-08-16

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

TA关注的人

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