第三阶段:树莓派
文章平均质量分 75
alwaystrust
这个作者很懒,什么都没留下…
展开
-
第三阶段:50-52.IO操控代码编程
5.2 寄存器地址配置(ioremap、volatile物理地址映射成虚拟地址)①在原来框架的基础上,添加寄存器的定义volatile unsigned int* GPFSEL0 = NULL;volatile unsigned int* GPSET0 = NULL;volatile unsigned int* GPCLR0 = NULL;要想写出上面的代码,要掌握以下几点:弄清楚寄存器的分组 其中寄存器的0表示的是分组,目标操作的IO是pin4,由文档可知,属于寄存器分组0。vo原创 2021-12-04 23:28:23 · 255 阅读 · 0 评论 -
第三阶段:49.树莓派博通BCM2835芯片手册导读
基于简单字符设备驱动框架编写驱动代码驱动引脚1.General Purpose I/O (GPIO)板块查看芯片手册的目的性很强:做哪一块的开发,就只看那一块,现在要开发的是GPIO,熟悉控制IO口的寄存器最为重要。如果看完这部分的文档,你对于以下几个问题(后面有解析)有清晰的答案,说明你真正读懂了这一部分的开发。①操作逻辑:简言之就是怎么进行配置相关寄存器,这些配置步骤和思想其实都很类似。②需要重点掌握的寄存器有哪些?例如输入 / 输出控制寄存器,输出 0 / 1控制寄存器,清除状态寄存器原创 2021-12-03 02:06:04 · 633 阅读 · 0 评论 -
第三阶段:48.微机总线地址物理地址虚拟地址介绍
三种地址介绍写驱动是为了操作IO口,实现自己的wiringpi库,跟硬件打交道。首先要理解以下3个地址的概念:4.1 总线地址通俗来说:cpu能够访问的内存范围现象:电脑装了32位(bit)的系统,明明内存条有8G,却只能识别3.8G左右,这是因为32位仅能表示/访问232=4,294,967,296bit=4,194,304Kb=4096Mb=4G左右。只有装了64位的,才能够识别到8G。32位、64位是计算机CPU一次处理数据能力的大小。树莓派装载32位操作系统,寻址自然是4G。树莓原创 2021-12-02 18:31:57 · 1217 阅读 · 0 评论 -
第三阶段:43-47.树莓派基于Linux内核驱动开发
目录一、驱动认知1.1 为什么要学习写驱动1.2 文件名与设备号1.3 open函数打通上层到底层硬件的详细过程二、基于框架编写驱动代码2.1 编写上层应用代码2.2 修改内核驱动框架代码2.3 部分代码解读2.3.1 static的作用2.3.2 结构体成员变量赋值方式2.3.3 结构体file_operations(最终加载到内核驱动链表)2.3.4 手动生成设备三、驱动代码编译和测试3.1 驱动框架的模块编译并发送至树莓派①Makefile内添加生成.o命令②模块编译生原创 2021-12-01 22:54:47 · 1007 阅读 · 0 评论 -
第三阶段:41-42.Linux内核结构介绍
目录Linux内核结构框图图解linux系统架构shellshell脚本Linux内核结构框图链接:https://www.cnblogs.com/haoyufeng/p/4434058.html对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。函数库就像一个“黑匣子”,提供了一系列API支配内核运作,但你不知道内核发生了什么。内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,根本不需原创 2021-11-30 01:36:22 · 105 阅读 · 0 评论 -
第三阶段:36-40.linux文件系统、文件系统结构、虚拟文件系统
目录文件系统概述学术定义文件系统种类什么是分区简单理解windows和linux文件系统的区别文件系统结构/etc目录下可以设置开机启动程序切换为root超级用户/proc目录举例绝对路径与相对路径虚拟文件系统(Virtual File System)(VFS)是什么?有什么作用?EG1:cp指令的实现EG2:从系统编程,从上层到底层来看1.文件系统概述原文链接:https://www.cnblogs.com/ddz-linux/p/10458383.html#2.文原创 2021-11-29 02:33:57 · 734 阅读 · 0 评论 -
第三阶段:35-36.树莓派Linux内核编译、Linux内核镜像拷贝至树莓派并启动新内核
树莓派Linux内核编译为什么要配置编译?因为:驱动代码的编写,驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码第一种方式:cp 厂家.config .config。第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置。第三种方式:完全自己来。编译指令:ARCH=arm CROSS_C原创 2021-11-28 04:02:23 · 458 阅读 · 0 评论 -
第三阶段:34.配置Linux内核适合树莓派相关操作
目录树莓派Linux源码配置(适合树莓派)总体概述配置的三种方式1.照搬厂家的配置(使用这种方式)2.参考厂家的配置(感受一下)3.完全自主配置(需要一定工作经验)树莓派Linux源码配置(适合树莓派)总体概述配置的三种方式参照博文(一般厂家会给到这样的操作手册,没有就凉凉了,玩不了):http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan原创 2021-11-27 11:57:31 · 272 阅读 · 0 评论 -
第三阶段:33.树莓派内核开发准备(内核源码获取、启动过程、源码目录树)
目录1.交叉编译工具的安装2.内核源码获取3.嵌入式设备带操作系统的启动过程扫盲4.Linux内核源码树扫盲(1)内核源码简介(2)Linux内核源代码目录树结构{a.tree指令查看;b.内核源码目录树}1.交叉编译工具的安装23-28交叉编译2.内核源码获取下载哪个版本取决于树莓派的版本,用命令查看uname -r官网下载方式(方便以后下载树莓派其他内核版本):官网地址:https://github.com/raspberrypi/3.嵌入式设备带操作系统的启动过程扫原创 2021-11-25 16:36:24 · 222 阅读 · 0 评论 -
第三阶段:23-28.树莓派交叉编译
1.什么是交叉编译编译:是在一个平台上生成该平台上的可执行代码。交叉编译是在一个平台上生成另一个平台上的可执行代码。比如:<1> C51的交叉编译的发生在keil(集成环境上面)<2> 我们在windows上面编写C51的代码,并编译成可执行代码,如:xxx.hex,是在C51上面运行,不是在windows上面运行<3> 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如:a.out,是在树莓派上面运行,不是在ubuntu Linux上面运行2.原创 2021-11-21 22:50:48 · 194 阅读 · 0 评论 -
第三阶段:语音模块1——7
目录硬件模块化开发的行情LD3320语音模块使用手册介绍:语音模块验货测试测试结果良好Source Insight代码查看器创建工程修改字体配色方案中文乱码关联代码语音识别模块代码分析语音识别模块二次开发硬件模块化开发的行情LD3320语音模块使用手册介绍:通信方式:串口通信(5VTTL电平(为主),RS232,R,485)语音模块验货测试Source Insight代码查看器创建工程注意:使用这个查看代码可能会破坏代码,要用代码需要提前备份或重新解压。1原创 2021-11-20 00:07:27 · 299 阅读 · 0 评论 -
第三阶段:20.树莓派和电脑之间串口通信编程
1.使用串口通信时需包含头文件 #include<wiringSerial.h>2.注意:初次使用树莓派串口编程,需要配置链接:https://www.cnblogs.com/lulipro/p/5992172.html修改cmdline.txt文件输入指令:sudo vi /boot/cmdline.txt删除:console=serial0,115200修改完记得:sudo reboot 重启树莓派3.相关的API<1> int serialOpen (char原创 2021-11-19 13:11:50 · 589 阅读 · 0 评论 -
第三阶段:15.树莓派控制单个继电器
树莓派库(wiringPi)详解:https://www.cnblogs.com/lulipro/p/5992172.html继电器:电源 vcc 是 3.3V#include <wiringPi.h>#include <stdio.h> #define SWITCHER 7 //宏定义:给引脚7一个名字 int main(){ int cmd; if(wiringPiSet原创 2021-11-17 01:24:50 · 156 阅读 · 0 评论 -
第三阶段:14.树莓派外设开发编程
树莓派外设开发接口文档参考wiringPi(特定平台,特定功能接口) 库(linux 动态库.so 静态库.a)https://www.cnblogs.com/lulipro/p/5992172.html树莓派的接口:驱动IO口: input output 对主控芯片来说Input: 烟雾,火焰,震动,人体 等传感器Output: 继电器,蜂鸣器PWM: 电机调速,灯光调明亮度串口 uart:IIC:SPI:IIS:其原创 2021-11-17 00:26:46 · 123 阅读 · 0 评论 -
第三阶段:11.linux库之静态库的生成和使用
11.linux库之静态库的生成和使用1、库参考博文:https://www.cnblogs.com/sunsky303/p/7731911.htmlhttps://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956介绍: 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,原创 2021-11-16 01:17:42 · 146 阅读 · 0 评论 -
第三阶段:12.linux库之动态库生成和使用
2.动态库的制作:gcc -shared -fpic testfunc.c -o libcalc.so//生成 libxxx.so (动态库)文件-shared 指定生成动态库-fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。3.动态库的使用(与静态库一样):gcc test.c -lcalc -L . //libcalc.so 动态库库名砍头去尾生成的可执行文件a.out不能直接运行,提示没有这个文件,此时需要指定动态库位置引用动态原创 2021-11-16 02:16:26 · 1020 阅读 · 0 评论