随笔分类 - linux
摘要:什么是ioctl 在write函数中,直接控制寄存器或使用gpio子系统; 有没有更简单的用法呢,有就是ioctl函数; ioctl和read/write用处不一样; 命令宏规则 命令宏用法 示例代码 应用程序 驱动程序 应用程序和驱动中都要有上面的宏定义
阅读全文
摘要:与设备树有关 pinctrl子系统 之前这么操作 pinctrl是gpio框架 gpio子系统 实现引脚功能的配置,如设置为gpio,特殊功能,gpio方向,设置中断 常用gpio子系统提供的api函数 gpio_request函数 先会用 修改后的设备树文件,在Linux系统上显示 加载驱动前,要
阅读全文
摘要:设备树的由来以及基本概念 设备树文件代替的是device.c文件,拿到了内核外面,platform匹配上基本不变,不用重新编译内核了; 采用文本格式; 语法结构像树一样; 设备树基本语法 节点 阅读源文件,看节点从左往右看;看节点内容从上往下看; 节点名称 节点别名 uart8和serial关系 节
阅读全文
摘要:平台总线模型概念 注册platform设备 struct platform_device结构体 platform_device_register() platform_device_unregister() 生成名叫beep_test 注册platform驱动 struct platform_dri
阅读全文
摘要:学习与杂项设备不同点 注册字符类设备号的两个方法 静态分配一个设备号 设备号由主设备号、次设备号组成 设备名称,如下 动态分配 注销设备号 静态分配或动态分配都用此函数注销设备号 示例 建议使用动态申请方式 注册字符类设备 之前讲过注册杂项设备,如下 注册步骤 示例,在上一讲示例里继续添加 驱动代码
阅读全文
摘要:驱动传参概念 驱动传参就是传递参数给我们的驱动,insmod beep.ko a=1 驱动传递参数有什么作用 给驱动传递参数 传递普通参数,比如char,int类型的 sys文件夹目录 传递数组 定义的数组是5个,多传入的无效,如下 这一讲,是独立的一讲,讲的是如何驱动模块传递参数
阅读全文
摘要:学习地址 单片机和裸机中操作硬件是怎么操作的 与上面不同,在linux上想要操作硬件,需要先把物理地址转换成虚拟地址。因为使能MMU 2个函数 用起来非常方便 注意:物理地址只能被映射一次,多次映射会失败 如何查看哪些物理地址被映射过 cat /proc/iomem proc文件夹目录 实践 编写驱
阅读全文
摘要:何为设备节点 杂项设备节点在哪 /proc/misc 杂项设备属于字符设备,可以自动生成设备节点; 杂项设备比字符设备简单; 杂项设备主设备号相同,为10,次设备号不同; 主设备号和从设备号概念 主设备号可以通过命令cat /proc/devices查看 杂项设备的描述 上面提到的文件操作集合 in
阅读全文
摘要:驱使硬件 移植(同一个东西)(移植心脏) 字符设备驱动(工作中大部分是字符设备) 驱动分4部分: 头文件 驱动模块的入口和出口 声明信息 功能实现 编译驱动2种方法: 将驱动编译成模块,然后使用命令将驱动加载到内核 需要Makefile文件 这里是obj-m 编译 加载驱动模块 使用insmod命令
阅读全文
摘要:同步概念 协同步调,按预定的先后次序运行 线程同步 数据混乱原因 解决办法:在程序中实现就是互斥量 互斥量mutex 学习地址 也叫互斥锁(只有一把锁),抢到锁的可以访问共享数据; 线程不拿锁也可以访问共享数据,但是建议先拿锁再访问共享数据,避免数据混乱; 数据混乱示例: 主要应用函数 参考文章 使
阅读全文
摘要:线程概念 线程是强加入进来的; gdb不支持线程调试; 什么是线程 学习地址 LWP 线程号 linux内核线程实现原理 学习地址 查看lwp号,ps -Lf pid 线程共享资源 线程不要和信号一起用; 线程非共享资源 线程优缺点 进程、线程,优选线程(简单); 线程控制原语 pthread_se
阅读全文
摘要:进程组和会话 概念和特性 学习地址 学习地址 创建会话 getsid函数 setsid函数 学习地址 pid = pgid = sid 示例代码: 适合后台运行 守护进程 学习地址 注意:不受用户登录、注销影响; 3-5根据需要设置 示例代码:
阅读全文
摘要:信号的概念 简单 不能携带大量信息 满足某个特定条件才发送 学习地址 与硬件中断类似 A给B发送信号,B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。 与硬件中断类似--异步模式。但是信号是软件层面上实现的中断,早期常被称为“软中断”
阅读全文
摘要:学习地址 IPC即进程间通信 进程间通信框架如下: 进程间通信方式如下: 管道得有血缘关系 管道(匿名管道) 前提 作用于有血缘关系的进程间 实现原理 内核借助环形队列机制,使用内核缓冲区实现 特性 (文件、目录、软件链接占磁盘空间,称为真文件;管道、套接字、字符设备、块设备不占用磁盘空间,称为伪文
阅读全文
摘要:学习地址 几个函数 fork函数 返回值 子进程pid(父进程返回) 0 子进程 -1 错误 fork() if() elseif() else printf(); // 执行两次 getpid() getppid() 创建n个进程?创建n个进程? 学习地址 错误示例 for() { fork()
阅读全文
摘要:学习地址 进程和程序 并发 分时复用cpu 单道程序设计 多道程序设计 cpu和mmu 学习地址 mmu在cpu内部 虚拟内存和物理内存映射 学习地址 进程控制块pcb 一个结构体,源码400行左右 进程id 运行状态 进程切换时需要保存或恢复的一些cpu寄存器 描述虚拟地址空间的信息 描述控制终端
阅读全文
摘要:学习地址 K * # ctrl+o gdb调试逻辑问题,gcc检查语法等问题 -g 基础用法 gdb a.out list break 25 run next step print i continue quit (ctrl + d) 其它指令 查找段错误 gdb a.out run停止位置即错误位
阅读全文
摘要:学习地址 嵌入式方向搞到什么程度,简单使用 shell脚本语法 输入输出 表达式 test命令 && || 中括号判断符[] == != 默认变量 条件判断 if case 函数 循环 while for
阅读全文