![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux知识
小小城御园
生命在于折腾,知识在于积累
展开
-
make_ext4fs错误解决办法
错误截图如下所示root@ubuntu:/home/zhangtao/share/4412# make_ext4fs -s -l 314572800 -a root -L linux system.img systemmake_ext4fs: error while loading shared libraries: libstdc++.so.6: cannot open shared o...原创 2018-12-09 20:51:01 · 4608 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之三:SPI控制器驱动
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等; 配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作; 向通用接口层提供接口,使得上层的协...转载 2019-06-02 21:00:53 · 282 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备、SPI协议驱动和SPI控制器的数据抽象,一部分是为了协助数据传输而定义的数据结构。另外,通用接口层还负责SPI系统与Linux设备模型相...转载 2019-06-02 20:53:51 · 233 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之一:系统概述
SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是:CS 片选信号SCK 时钟信号MISO...转载 2019-06-02 20:12:17 · 160 阅读 · 0 评论 -
__attribute_unused__和__attribute_used__的作用
在Linux上这样的定义如下:#define__attribute_used__ __attribute__((__used__))#define__attribute_unused__ __attribute__((__unused__))在gcc手册中找到了有关的解释:unused:This attribute, attached to a function, mean...原创 2019-06-02 16:32:15 · 8174 阅读 · 1 评论 -
module_init与module_exit的分析
在编写驱动模块的时候有两个函数经常被使用也必须被使用,分别是module_init和module_exit,这两个函数分别在加载和卸载驱动时被调用,即调用insmod和rmmod命令的时候,但是insmod和rmmod不能识别这两个函数,它只能识别init_module和cleanup_module,其实init_module和cleanup_module相当于是module_in...原创 2019-06-02 16:04:47 · 5790 阅读 · 0 评论 -
__define_initcall(level,fn)和do_initcalls()的妙用
__define_initcall(level,fn)将一系列初始化函数的起始地址值按照一定的顺序放在一个section中。在内核初始化阶段,do_initcalls()将按顺序从section中以函数指针的形式取出这些函数的起始地址,来依次完成相应的初始化。由于内核某些部分的初始化需要依赖于其他某些部分的初始化的完成,因此这个顺序排列常常非常重要。一、分析__define_i...转载 2019-06-02 15:08:18 · 601 阅读 · 0 评论 -
命令行处理函数getopt_long的使用方法
getopt_long函数,getopt_long函数具有getopt函数的所有功能,并且还可以指定“长参数”,getopt_long比getopt多了两个参数: int getopt_long(int argc, char * const argv[], const char *optstring, ...原创 2019-05-12 22:00:40 · 336 阅读 · 0 评论 -
命令行处理函数getopt的使用方法
日常开发中,会经常对命令行参数进行处理,当参数比较少的时候,可以手动处理,但是当参数过多的时候就要使用getopt来处理了。int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, op...原创 2019-05-12 21:09:45 · 384 阅读 · 0 评论 -
点阵字库HZK32的使用方法和显示
汉字库种类非常多,但是都是按照顺序排列的。前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:(94*(区号-1)+位号-1)*字节数(一个汉字字模占用的字节数)。以32*32点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32*32/8。32*32字模为长和宽都是32位的数...原创 2019-05-18 23:43:18 · 4703 阅读 · 0 评论 -
英文字符字模获取显示和旋转显示
字模文件ASC16文件中字符的位置为:char*16+1,比如,我们要取a的字模,我们只需要在ASC16文件的偏移地址为97*16+1的位置读取16字节的数据即为a的字模数据。 如下代码包括:8*16字模的获取显示,8*16的左旋转90°和右旋转90°的显示,以及8*16和16*8的字模的放大显示代码如下所示:#include <stdio.h&g...原创 2019-04-25 23:37:27 · 1079 阅读 · 1 评论 -
可变参数的应用-printf函数的实现
可变参数最典型的应用就是打印函数的格式化输出,下面就以一个简单的程序讲解printf函数的实现实际上是依赖于字符的打印,所有打印的实现都离不开字符的打印,下面就以字符的打印实现几个格式化输出的函数,其中主要用到的可变参数。字符函数的打印就使用: printf("%c",char);下面就使用字符的打印实现格式化输出函数#include <stdio.h>...原创 2019-01-08 23:14:44 · 328 阅读 · 0 评论 -
可变参数列表
可变参数列表是通过宏来实现的,最典型的应用是printf函数的实现,这些宏定义于stdarg.h头文件,他是标准库的一部分。这个头文件生命了一个类型vs_list和三个宏:va_start、va_arg、va_end。我们可以声明一个va_List的变量,与这几个宏配合使用。例:编写一个函数计算几个数的平均值,函数的第一个参数为要计算的数的个数#include <stdio.h&g...原创 2019-01-08 22:53:18 · 1954 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式。所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回。而异步方式则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码来解释就是,调用传输的函数后,函数会立刻返回而不用等待数据传输完成,我们只需设置一个回...转载 2019-06-02 21:08:50 · 424 阅读 · 1 评论