自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于树莓派驱动框架的IO口驱动编写

一、驱动代码编写通过cat /proc/cpuinfo 可知 树莓派cpu是BCM2835然后去http://www.eeworld.com.cn/查询下载对应的数据手册。例程仅操作pin17这个gpio口所以用到以下寄存器需要注意的是这里的地址,数据手册给出的是虚拟地址,但是在编程中我们需要使用物理地址0x3f000000。在关于GPFSELn的篇章我们找到pin17的寄存器在GPFSEL1中的23-21这三位同理我们也可以找到关于对io口置位和清零的寄存器GPSET0和GPCLR0

2021-08-26 15:29:31 106

原创 微机总线地址物理地址虚拟地址介绍

一、总线地址属于一种电脑总线,是由CPU或有DMA能力的单元,用来沟通这些单元想要存取电脑内存元件/地方的实体位址。简单来说就是CPU能访问的内存的范围如以前win32位的电脑 最多只有4G内存,即使电脑装了8G的内存条,可是系统识别不到。32位就是2^32 bit 也就是4Gbit二、物理地址硬件的实际地址或绝对地址。三、虚拟地址逻辑(基于算法的地址(软件层面的地址))地址称为虚拟地址。也就是说通过页表等让1G的内存能映射成4G...

2021-08-23 20:46:07 122

原创 Linux内核结构介绍

一、内核结构框图用户级存在应用程序和C库,通过系统调用接口和虚拟文件系统对内核进行访问,C库提供应用程序支配内核操作的接口,系统调用就是与C库交互的地方。系统调用接口可以操作底层相关,如进程线程等,也可以访问各种文件系统,而不同的文件系统类型则需要虚拟文件系统的支持。shell:是一个应用程序,一种系统用户界面,一个命令解释器,提供了用户态与内核态交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,并返回执行结果给应用程序https://www.jb51.net/LINUXjish

2021-08-23 13:21:14 63

原创 Linux文件系统及虚拟文件系统认知

一、什么是文件系统常规认知: 根目录文件系统是操作系统用于明确存储设备组织文件的方法。以上说的方法:就是文件管理系统(程序),简称文件系统二、文件系统(文件管理系统的方法)的种类有哪些?FAT VFAT NTFS EXT1/2/3/4 HFS …树莓派查看文件系统的命令: df -Tvfat : boot(bootloader, kernel)ext4 : 根目录tmpfs : 内存文件系统三、什么是分区windows: 随意(面向普通用户PC),目录即分区C(装系统的位置)

2021-08-23 13:05:15 89

原创 驱动认知及基于驱动框架的代码编写

一、驱动认知下图为驱动结构框图:驱动结构分为三层:用户、内核、硬件首先从用户空间来看,用户空间包含应用和c库。像我们学习中编译完成,可执行的a.out这类项目属于应用,基础c和c库属于C library,像文件、进程、进程间通信、线程这类都属于c库,也就是说 open、read、fork、socket、pthread等在c库中,换而言之c库就是提供了APP支配内核工作的接口。内核空间,上述所说的进程等都由内核处理,上层只需要直接调用fork等API即可,同样的设备驱动也由内核来实现。硬件,硬件

2021-08-22 20:13:53 274

原创 树莓派内核配置

一、原材料https://github.com/raspberrypi/linux 内核源码代码的编译需要一个提前编译好的内核,所以需要在电脑上将内核进行编译,而编译就需要配置,毕竟Linux支持多架构多平台,需要配置成合适的平台。二、配置config配置会生成 .config 文件,这个文件指导makefile把需要的部分组织起来,形成内核。第一种方式:cp 厂家.config .config第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置

2021-08-18 16:05:56 316

原创 树莓派交叉编译工具链安装及使用

一、原材料 tool-master宿主机:x86目标机:armtool-master下载地址:https://github.com/raspberrypi/tools二、安装步骤1.解压zip在压缩包目录下输入unzip 文件名解压2.进入文件夹cd arm-bcm2708cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64(32位的不带-x64)ls找到arm-linux-gnueabihf-gcc这个软链接./arm-linux-gnuea

2021-08-12 20:01:59 618

原创 静态库与动态库操作

一、静态库静态库在程序执行前就已经加入到目标程序中去了,所以静态库运行快,但是每一次更新部署发布都很麻烦静态库的制作:原材料: fun.c fun.h(main.c 需要include)1.gcc fun.c -c 生成 fun.o2.ar rcs libfun.a fun.o 生产libfun.a静态库制作完成。静态库使用:1.gcc main.c -lfun -L ./ -o calStatic-lfun : 将libfun.a掐头(lib)去尾(.a)-L :告诉编译器从-L指

2021-08-05 13:34:20 100

原创 Linux线程

线程包含于进程中,是进程的实际运作单位。一个进程中可包含有多个线程,所有线程共用同一块资源,同样的一个线程的错误会导致整个进程出现问题。使用线程是因为线程的开销远小于进程,同时进程之间数据的通信相对复杂,而线程共用相同空间,会方便很多。多线程目前在Linux平台上有成熟的pthread库,其主要开发分为三块,线程,互斥锁和条件。1.线程操作:创建,退出,等待。API:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, v

2021-07-29 14:25:12 51

原创 Linux进程间通信的部分方式

介绍管道(无名管道和命名管道)、消息队列、共享内存、信号及信号量这几种进程间的通信方式。一、管道管道分为无名管道和命名管道。无名管道仅支持父子 及兄弟进程之间通信,而命名管道则支持无亲缘关系的进程通信。无名管道无名管道在内存中创建了一个文件分为读和写两种,分别为fd[0]和fd[1]。上述例子中父进程为发送端,子进程为接收端。所以在父进程中先关闭了读,用write函数将数据写入文件,同理子进程关闭写端口,用read函数读出数据。无名管道的文件并不会在磁盘中。#include <stdio.h

2021-07-28 18:34:21 116

原创 Linux文件创建读写

通过open和creat都可以创建一个文件,返回值即为文件名描述符。open函数原型int open(const char *pathname, int flags, mode_t mode);第一个参数为一个文件的路径,可以视作一个字符串,第二个参数为标志,包括O_RDWR,O_RDONLY,O_WRONLY等。第三个参数为文件的权限,4可读,2可写,1可执行其中O_CREAT表示,如不存在这个文件就创建它,这时需要第三个参数,即配置文件的许可权限。O_APPEN打开表示每次都从文件尾部开.

2021-07-13 20:57:55 1061

原创 结构体学习日记

结构体学习日记结构体类似于创建一个自定义的类型即类似于int(整形),该类型内包含多个其他类型的数据。例如struct student{int score;char name[64];};注意:结构体定义完成后加 ; !!!通过这样的方式我们定义了一个结构体,(需要注意的是 在这个状态下我们只是声明了一个结构体 由于并没有给出实际的命名,在计算结构体大小的情况下,上述...

2020-04-30 20:59:58 161

空空如也

空空如也

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

TA关注的人

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