Linux-野火imx6ull学习笔记
文章平均质量分 66
Linux(嵌入式开发)-本专栏主要为了方便自己复习而存储的,笔记参考来源于 野火MX_linux开发实战指南,具体观看B站视频
十七阿哥的春天
部分内容仅对粉丝可见,请前往分类专栏进行查看。
展开
-
Linux下的Makefile的构建_gcc
Makefile简介Makefile的本质:无论多么复杂的语法,都是为了更好地解决项目文件之间的依赖关系。1.Makefile的变量、模式匹配变量系统变量自定义变量=,延迟赋值:=, 立即赋值?=,空赋值+=,追加赋值自动化变量$<:第一个依赖文件$^:全部的依赖文件$@:目标模式匹配%:匹配任意多个非空字符shell:*通配符默认规则.o文件默认使用.c文件来进行编译CC=gccTARGET=mp3OBJS=main.o mp3.o$(TAR原创 2021-05-03 16:34:40 · 577 阅读 · 2 评论 -
llinux驱动以及系统主要程序执行框图
1.kobject:驱动的基石2.用户空间的法宝3.xbus:打造自属的驱动总线4.platform :虚拟的平台总线5.pinctl框架图原创 2021-04-30 21:01:58 · 186 阅读 · 1 评论 -
野火i.MX6ULL Linux开发板资料
1、配套教程:《i.MX6UL Linux开发实战指南》i.MX6UL Linux开发实战指南在线文档3、开发板云盘资料(硬件资料、其它软件)百度云资料链接: https://pan.baidu.com/s/1kJdJ6xc12Yg4rPby_MatDA 提取码:4u7d请查看硬件资料文件夹、开发软件文件夹、开发板使用_资料源码必读说明.pdf...原创 2021-04-30 20:51:01 · 1369 阅读 · 1 评论 -
入门篇-01-用户管理与文件权限
用户管理与文件权限用户:Linux系统的使用者管理员(root)系统用户普通用户用户组:一对一、一对多、多对一、多对多。***思考:***为什么需要对用户管理?三个核心文件/etc/passwd:用户名:密码(x):UID:GID:用户信息说明栏:用户目录:ShellUID: - 管理员(root):具有系统所有权限(0) - 系统用户:管理系统运行服务(1~999) - 普通用户:具有系统一部分权限(1000以上)/etc/shadow:用户名:加密密码:最原创 2021-05-20 17:30:08 · 123 阅读 · 0 评论 -
入门篇-02-使用Linux命令行
使用Linux命令行Shell是什么对外接受用户输入的命令。对内通过系统调用传递给内核。呈现内核运行结果。Shell与图形化界面图形化界面:鼠标操作为主,简单易学。Shell:键盘操作为主,需要记忆各种控制命令。常用命令归纳查询命令:man目录操作类cd:pwd:mkdir:rmdir:mv:文本操作类touch:cat:echo:wc:rm:ln:cp:tar:find:grep:用户管理类sudo:su:useradd/add原创 2021-05-20 17:30:57 · 131 阅读 · 0 评论 -
入门篇-03-vi编辑器、shell脚本编程
Shell脚本编程Shell脚本简介Shell脚本是什么?shell命令按一定语法组成的文件Shell脚本有什么用?批处理文件/整合命令软件启动性能监控日志分析…Shell命令的本质内置命令/外部命令Shell脚本语言和C语言一样吗?编译型语言解释型语言常用的Shell解释器有哪些?/etc/shells第一个Shell脚本helloworld编辑、保存、改权限、运行/排错Shell启动方式当程序执行指定解释器运行source和.Shell脚本原创 2021-05-20 17:37:03 · 1696 阅读 · 0 评论 -
入门篇-04-lseek、sync、open_close、read、write函数
这里写目录标题1、lseek函数lseek函数功能头文件函数原型返回值2、sync函数页缓存和回写功能头文件函数原型返回值3、OPEN函数4、CLOSE函数5、read函数头文件函数原型返回值6、write函数头文件函数原型返回值复制普通文件小实验1、lseek函数lseek函数功能设置文件读写位置头文件#include <unistd.h>函数原型off_t lseek(int fd,off_t offset,int whence)若whence为SEEK_SET,基准原创 2021-05-23 08:42:03 · 278 阅读 · 0 评论 -
入门篇-05-文件描述符和打开模式
文件描述符和打开模式系统IO编程openwritereadlseekclose伪代码:int fd;fd = open(filename,flags,mode);lseek(fd,offset,whence);write(fd,buf,write_len);read(fd,buf,read_len)close(fd);文件描述符特殊的索引实际上就是进程中file_struct结构体成员fd_array的数组下标文件打开模式主模式:O_RDONLY:只读模式O_W原创 2021-05-25 16:00:53 · 81 阅读 · 0 评论 -
内核编程篇-01-创建进程、进程终结
1、进程的由来程序静态文件进程运行着的实体查看进程之间的关系pstree操作系统如何区分进程PID:进程的身份证ps -ef | moreq 来退出命令2、创建一个新进程fork函数头文件:#include <unistd.h>c函数原型:pid_t fork(void);返回值:成功 :0或其他正整数失败:-1fork函数特性执行fork函数之后,fork函数会返回两次在旧进程中返回时,返回值为0在新进程返回时,返回值为进程的原创 2021-05-26 08:48:25 · 153 阅读 · 0 评论 -
内核编程篇-02-进程组、会话、终端、 守护进程
进程组、会话、终端进程组作用:对相同类型的进程进行管理进程组的诞生在shell里面直接执行一个应用程序,对于大部分进程来说,自己就是进程组的首进程。进程组只有一个进程如果进程调用了fork函数,那么父子进程同属一个进程组,父进程为首进程在shell中通过管道执行连接起来的应用程序,两个程序同属一个进程组,第一个程序为进程组的首进程进程组id:pgid,由首进程pid决定会话作用:管理进程组会话的诞生调用setsid函数,新建一个会话,应用程序作为会话的第一个进程,称为会话首进程原创 2021-05-27 21:02:02 · 102 阅读 · 0 评论 -
内核编程篇-03-ps命令详解
ps命令详解auxaxjfa:显示一个终端所有的进程u:显示进程的归属用户及内存使用情况x:显示没有关联控制终端的进程j:显示进程归属的进程组id、会话id、父进程idf:以ascii形式显示出进程的层次关系ps auxuser:进程是哪个用户产生的pid:进程的身份证号码%cpu:表示进程占用了cpu计算能力的百分比%mem:表示进程占用了系统内存的百分比vsz:进程使用的虚拟内存大小rss:进程使用的物理内存大小tty:表示进程关联的终端stat:表示进程当前状态原创 2021-05-27 21:19:03 · 248 阅读 · 0 评论 -
内核编程篇-04-进程间通信(ipc)
什么是进程间通信(ipc)进程间通信数据传输资源共享事件通知进程控制Linux系统下的ipc早期unix系统ipc管道信号fifosystem-v ipc(贝尔实验室)system-v 消息队列system-v 信号量system-v 共享内存socket ipc(BSD)posix ipc(IEEE)posix 消息队列posix 信号量posix 共享内存...原创 2021-05-29 18:22:12 · 227 阅读 · 0 评论 -
Linux常用函数总结
Linux常用函数:1.alloc_chrdev_region是一个函数语句,头文件是<linux/fs.h>,可以动态分配设备编号。该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备数count,以及设备名,调用该函数后自动分配得到的设备号保存在dev中。int alloc_chrdev_region(dev_t *dev,unsigned int -firstminor,unsigned int -count,char *name);...原创 2021-04-23 10:05:33 · 2457 阅读 · 0 评论 -
Linux中断基础概念
Linux中断基础概念回顾裸机开发通用中断控制器(GIC)中断类型、硬件中断号、分发器和cpu接口单元中断向量表一级查表、二级查表中断处理流程进入irq模式、保护现场、获取硬件中断编号、执行中断处理函数、还原现场GIC中断控制器节点arch/arm/boot/dts/imx6ull.dtsi初始化中断控制器、设置其他中断控制器节点的描述格式intc: interrupt-controller@a01000 { compatible = "arm,cor原创 2021-05-08 11:22:56 · 307 阅读 · 0 评论 -
Linux按键中断实验以及实验函数源码
Linux按键中断实验硬件原理图设备树节点iomuxc子节点pinctrl_button: button{ fsl,pins = < MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x000110A1 >; };自定义按键节点button_interrupt { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_button>;原创 2021-05-09 21:35:50 · 559 阅读 · 0 评论 -
输入(input)子系统基础概念+实验
输入(input)子系统基础概念统一管理外部输入设备按键键盘鼠标触摸屏…用户空间接口/dev/input/event0/1/2/…/dev/input/mouse0/1/2/…/dev/input/sj0/1/2/……分层模型核心层创建input设备类根据输入设备种类、分发事件到不同事件处理器事件处理层提供具体设备的操作接口,为输入设备(input_dev)创建具体设备文件通用事件处理器(drivers/input/evdev.c)鼠标事件处原创 2021-05-09 21:48:23 · 740 阅读 · 0 评论 -
SPI主控制器驱动和核心函数
SPI主控制器驱动和核心函数spi_imx_probe()函数获取设备树节点信息,初始化spi时钟、dma…保存spi寄存器起始地址,填充spi控制器回调函数drivers/spi/spi-imx.cstatic int spi_imx_probe(struct platform_device *pdev){ struct device_node *np = pdev->dev.of_node; const struct of_device_id *of_id = of_ma原创 2021-05-07 19:30:44 · 232 阅读 · 0 评论 -
SPI驱动框架简介
SPI驱动框架简介SPI框架图SPI核心层提供SPI控制器驱动和 设备驱动 的注册方法、注销方法、SPI通信硬件无关接口SPI主机驱动主要包含SPI硬件体系结构中适配器(spi控制器)的控制,用于产生SPI 读写时序主要数据结构:spi_master(spi_controller)SPI设备驱动通过SPI主机驱动与CPU交换数据主要数据结构:spi_device和spi_driver核心数据结构spi_masterinclude/linux/spi/spi.h#d原创 2021-05-07 19:29:45 · 427 阅读 · 0 评论 -
SPI物理总线
SPI物理总线信号线SCK:时钟线,数据收发同步MOSI:数据线,主设备数据发送、从设备数据接收MISO:数据线,从设备数据发送,主设备数据接收NSS、CS:片选信号线支持一主多从,全双工通信,最大速率可达上百MHzspi时序起始信号:NSS 信号线由高变低停止信号:NSS 信号由低变高数据传输:在 SCK的每个时钟周期 MOSI和 MISO同时传输一位数据,高/低位传输没有硬性规定传输单位: 8 位或 16 位单位数量:不受限制spi通信模式总原创 2021-05-07 18:33:06 · 1085 阅读 · 0 评论 -
IIC驱动实验:读取mpu6050数据
IIC驱动实验:读取mpu6050数据MPU6050空间运动传感器芯片3轴加速度3轴角速度硬件原理图设备树节点iomuxc子节点pinctrl_i2c1: i2c1grp { fsl,pins = < MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0 MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0 >;原创 2021-04-29 17:59:06 · 1242 阅读 · 0 评论 -
IIC核心函数与“万能”驱动
IIC核心函数与“万能”驱动i2c_add_adapter()函数drivers/i2c/i2c-core-base.c注册一个i2c适配器int i2c_add_adapter(struct i2c_adapter *adapter)int i2c_add_numbered_adapter(struct i2c_adapter *adapter)adapter->nr:适配器的编号参数:adapter:i2c物理控制器对应的适配器返回值:成功:0失败:负数i2c_a原创 2021-04-28 17:59:55 · 254 阅读 · 0 评论 -
IIC驱动框架简介
IIC驱动框架简介iic物理总线SCL:时钟线,数据收发同步SDA:数据线,具体数据支持一主多从,各设备地址独立,标准模式传输速率为100kbit/s,快速模式为400kbit/s常见iic设备eeprom触摸芯片温湿度传感器mpu6050…框架图I2C核心提供I2C总线驱动和设备驱动的注册方法、注销方法、I2C通信硬件无关代码I2C 总线驱动主要包含I2C硬件体系结构中适配器(iic控制器)的控制,用于I2C 读写时序主要数据结构:I2C_原创 2021-04-28 17:57:43 · 385 阅读 · 0 评论 -
gpio1节点:GPIO子系统常用函数
gpio1节点:GPIO子系统初窥GPIO1控制器的寄存器基地址类似的还有gpio2~5gpio1节点imx6ull.dtsigpio1: gpio@209c000 { compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; reg = <0x209c000 0x4000>; interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>, <原创 2021-04-27 17:02:09 · 1574 阅读 · 0 评论 -
pinctl_setting:如何统一管理pin state
pinctl_setting:如何统一管理pin state总体框图:pinctl_map保存了所有pin state所需要的pin group信息pinctl_setting把pin group信息按pin state分类保存(将引脚组按照引脚状态进行分类保存)目的pinctl_map->pinctl_settingfor_each_maps()宏drivers/pinctrl/core.h#define for_each_maps(_maps_node_, _i_原创 2021-04-27 12:48:49 · 320 阅读 · 0 评论 -
pinctl_map:引脚三千,只取一瓢
pinctl_map:引脚三千,只取一瓢pinctrl_map数组pin group配置信息pinctrl_map[0]:配置pin group的所有引脚复用pinctrl_map[1~n]:配置pin group的每个引脚的属性函数层次分析pinctrl_enable()->pinctrl_claim_hogs()create_pinctrl----------------------------------------------第一部分----------原创 2021-04-26 17:43:22 · 320 阅读 · 0 评论 -
pin state:pinctrl-names的真相
pin state:pinctrl-names的真相iomuxc节点存储全部所需的引脚配置信息"虚拟"外设设置pin state数量和类型设置状态对应的pin grouppin state->pin group,一对多pin group->pin,一对多pinctl_map存储外设所有state下pin group的配置信息函数层次分析pinctrl_enable()->pinctrl_claim_hogs()create_pinctrl------原创 2021-04-26 09:24:50 · 1734 阅读 · 0 评论 -
pin function和pin group:iomuxc节点解析始末
总体框图:设备树iomuxc节点层次iomuxcfunctiongroucfsl,pins = < xxx xxx >;…group…function…层次关系说明iomuxc:pinctrl子系统的设备树节点function:芯片具有外设功能,一个功能对应一个或多个IO组配置信息group:IO组中每个IO的配置信息fsl,pins:imx6ull中,功能和IO组的标识属性imx_pinctrl_p原创 2021-04-26 09:06:01 · 991 阅读 · 0 评论 -
imx_pinctrl和pinctrl_dev:引脚名字和编号的存放位置
pinctrl子系统预先确定引脚的数量和名字为每个引脚的配置信息分配内存(一旦pinctrl子系统驱动程序从设备树里iomux节点解析出芯片引脚的属性信息后就会存放到这里来)管理每个引脚的使用状态imx6ul_pinctrl_probe()函数pinctrl子系统驱动入口drivers/pinctrl/freescale/pinctrl-imx6ul.cstatic int imx6ul_pinctrl_probe(struct platform_device *pdev){ const原创 2021-04-25 15:44:34 · 460 阅读 · 0 评论 -
获取DTS属性信息(硬件资源)
DTS:硬件资源的说明书2设备树基本语法从上到下头文件主体子节点追加内容从外到内属性其他子节点属性其他子节点…常见节点属性compatible属性值类型:字符串intc: interrupt-controller@a01000 { compatible = "arm,cortex-a7-gic"; #interrupt-cells = <3>; interrupt-controller; reg = <原创 2021-04-24 12:25:11 · 586 阅读 · 0 评论 -
Device Tree Overlays:”插件“设备树
Device Tree Overlays:”插件“设备树传统设备树批量管理硬件资源,机制僵化”插件“设备树模块化管理硬件资源,灵活定制使用前提内核配置CONFIG_OF_OVERLAY = yCONFIG_OF_CONFIGFS = y挂载ConfigFSmount x /sys/kernel/config -t configfs案例说明设备树:foo.dts / { compatible = "corp,foo"; /* On chip perip原创 2021-04-24 12:23:44 · 3299 阅读 · 0 评论 -
在进程退出的时候回调执行的函数
设备相关1.device_destroy-清楚设备#include <linux/device.h>void device_destroy(struct class *dev, dev_t devt);例:device_destroy(class_mpu6050, mpu6050_devno);函数device_destroy()用于从linux内核系统设备驱动程序模型中移除一个设备,并删除/sys/devices/virtual目录下对应的设备目录及/dev/目录下对应的设备文件原创 2021-05-02 14:50:29 · 507 阅读 · 0 评论