- 博客(21)
- 资源 (19)
- 收藏
- 关注
原创 Linux内核设备驱动学习笔记整理(十四)----内核同步
/***************** * 内核同步的原理 *****************/(1)什么是内核同步所谓的内核同步就是对共享资源进行保护,防止并发访问。如果有多个执行线程(指任何正在执行的代码实例,比如一个在内核执行的进程,一个中断处理程序,或一个内核线程)同时访问和操作共享的数据,就有可能造成进程之间互相覆盖共享数据,造成被访问数据处于不一致的情况。这种错误很难跟踪和调试,但非常重...
2018-03-27 09:18:05 484
原创 Linux内核设备驱动学习笔记整理(十三)----中断处理
-------------------------------------/****************** * 中断处理 ******************/(1)中断和异常的概念 (陷入)中断中断是硬件设备和处理器间的通讯机制,是由外部硬件产生的异步事件。Linux处理中断的方式很大程度上与它在用户空间处理信号是一样的。驱动程序只需要为它自己设备的中断注册一个处理程序,并且在中断到达时进...
2018-03-27 09:02:18 739
原创 Linux内核设备驱动学习笔记整理(十二)----内存管理
-------------------------------------/********************** * linux的内存管理 **********************/到目前为止,内存管理是unix内核中最复杂的活动。我们简单介绍一下内存管理,并通过实例说明如何在内核态获得内存。(1)各种地址对于x86处理器,需要区分以下三种地址:*逻辑地址(logical addres...
2018-03-27 08:56:00 455
原创 Linux内核设备驱动学习笔记整理(十一)----时间管理
/****************** * linux内核的时间管理 ******************/(1)内核中的时间概念时间管理在linux内核中占有非常重要的作用。相对于事件驱动而言,内核中有大量函数是基于时间驱动的。有些函数是周期执行的,比如每10毫秒刷新一次屏幕;有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。要区分:*绝对时间和相对时间*周期性产生的事件和推迟执...
2018-03-27 08:48:39 401
原创 Linux内核设备驱动学习笔记整理(十)----字符设备
/******************** * 字符设备驱动 ********************/(1)字符设备驱动介绍字符设备是指那些按字节流访问的设备,针对字符设备的驱动称为字符设备驱动。此类驱动适合于大多数简单的硬件设备。比如并口打印机,我们通过在/dev下建立一个设备文件(如/dev/printer)来访问它。用户应用程序用标准的open函数打开dev/printer,然后用writ...
2018-03-26 23:55:05 573
原创 Linux内核设备驱动学习笔记整理(九)----虚拟文件系统
/******************** * 虚拟文件系统VFS ********************/(1)VFS介绍虚拟文件系统VFS作为内核的子系统,为用户空间程序提供了文件系统的相关接口。VFS使得用户可以直接使用open()等系统调用而无需考虑具体文件系统和实际物理介质。VFS提供了一个通用的文件系统模型,该模型囊括了我们所能想到的文件系统的常用功能和行为。通过这个抽象层,就可以实...
2018-03-26 23:47:04 368
原创 Linux内核设备驱动学习笔记整理(八)----系统调用
/**************************** * 系统调用 ****************************/SWI(1)什么是系统调用系统调用是内核和应用程序间的接口,应用程序要访问硬件设备和其他操作系统资源,必须通过系统调用来完成。在linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一的合法入口。系统调用的数量很少,在i386上只有大概30...
2018-03-26 23:43:18 476
原创 Linux内核设备驱动学习笔记整理(七)----Linux内核调试技术
/****************** * 内核的调试技术 ******************/(1)内核源代码中的一些与调试相关的配置选项内核的配置选项中包含了一些与内核调试相关的选项,都集中在"kernel hacking"菜单中。包括:CONFIG_DEBUG_KERNEL使其他的调试选项可用,应该选中,其本身不会打开所有的调试功能。...具体的调试选项说明可参见驱动一书,或通过menuc...
2018-03-26 23:38:39 371
原创 Linux内核设备驱动学习笔记整理(六)----内核中链表的使用
/******************** * 内核中链表的应用 ********************/(1)介绍在Linux内核中使用了大量的链表结构来组织数据,包括设备列表以及各种功能模块中的数据组织。这些链表大多采用在include/linux/list.h实现的一个相当精彩的链表数据结构。链表数据结构的定义很简单:struct list_head { struct list_head...
2018-03-26 23:33:31 552 3
原创 Linux内核设备驱动学习笔记整理(五)---proc文件系统
/***************** * proc文件系统 *****************/(1)/proc文件系统的特点和/proc文件的说明/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核...
2018-03-26 23:31:25 439
原创 Linux内核设备驱动学习笔记整理(四)----高级字符设备驱动
/****************** * 高级字符设备驱动 ******************/(1)ioctl除了读取和写入设备外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。比如弹出介质,改变波特率等等。这些操作通过ioctl方法支持,该方法实现了同名的系统调用。在用户空间,ioctl系统调用的原型是:int ioctl(int fd, unsigned l...
2018-03-26 23:28:45 447
原创 Linux内核设备驱动学习笔记整理(三)----Linux内核模块加载机制
#include <linux/moduleparam.h>1. 模块参数 在驱动定义变量 static int num = 0; //当加载模块不指定num的值时则为0 module_param(变量名, 类型, 权限); 类型: byte, int, uint, short, ushort, long, ulong, bool, charp 权限不能有写的权限 传参数: ...
2018-03-26 23:10:09 358
原创 Linux内核设备驱动学习笔记整理(二)----地址映射
#include <asm/io.h>#define ioremap(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE)//cookie表示物理地址, size表示映射大小。 ioremap把指定的物理地址映射到空闲的虚拟地址void __iomem *__arm_ioremap(unsigned long phys_addr, s...
2018-03-26 23:01:50 459
原创 Linux内核设备驱动学习笔记整理(一)----Linux内核基础
1. Linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载2. 编写内核驱动 #include <linux/module.h> #include <linux/init.h> static int __init test_init(void) { return 0; //返回0...
2018-03-26 22:49:51 942
原创 如何定制ubuntu官网下载的ubuntu系统ISO镜像(以ubuntu16.04 LTS ISO为例)
https://www.linuxidc.com/Linux/2018-01/150491.htmhttps://jingyan.baidu.com/article/e3c78d649d11dc3c4c85f5c9.html参考以上文章,使用Cubic这个软件进行系统定制。在定制的过程中,比如我们需要往从ubuntu官网下载的iso镜像里安装一些软件,或者自己定制一些库等等的操作,都可以直接复制到...
2018-03-16 00:11:16 6236 1
原创 编译内核出现:make: warning: Clock skew detected. Your build may be incomplete.
参考:http://smilejay.com/2012/08/warning-clock-skew/解决方法:ep:设置时间date -s 2018-03-14date -s 15:39:00重新再make即可消除该警告。原因:系统时间比文件修改时间早...
2018-03-14 15:42:13 1062
原创 在Linux下制作一个简单的给ARM开发板使用的文件系统
1.Busybox源码请网上自行下载,编译方法请参考百度。2.交叉编译工具链的设置也请先设置好。如果以上1、2没有问题,那么可以使用以下脚本,制作一个给ARM开发板使用的文件系统。可以自行定制使用,加入自己的Test demo。#!/bin/bash#yuanxin.yang develop 2015-07-05#文件系统和Busybox的路径====>可自己定制FILESYSTE...
2018-03-14 15:13:10 2357
原创 移植新内核到ubuntu系统上的步骤
1、在ubuntu官网下载ubuntu16.04的镜像和对应ubuntu16.04的内核版本源代码,或者在网易镜像源上找:http://mirrors.163.com/2、安装ubuntu16.04到PC主机上接下来执行以下:编译新的Linux内核给X86内核使用出现以下错误:scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: N...
2018-03-14 13:31:44 826
原创 QT5交叉编译出现"undefined reference to `qt_version_tag'"的解决方法
如下图所示:根据交叉编译的配置,我觉得我的qmake版本是没有配置错误的。输出的Complie Output的log如下:22:33:46: Running steps for project untitled...22:33:46: Starting: "/usr/bin/make" cleanrm -f moc_mainwindow.cpprm -f ui_mainwindow.hrm -f ...
2018-03-11 22:53:21 11026 2
原创 Linux下can驱动测试(基于Intel Corei7开发板)
最近要测试一些板卡,所以参考了一些博客,总结CAN的测试方法如下:1.sudo modprobe can加载虚拟can模块2.sudo ip link add dev vcan0 type vcan添加can0网卡3.ifconfig -a 可以查到当前can网络 can0 can1,包括收发包数量、是否有错误等等//ip link set can0 type can --help4.ip lin...
2018-03-06 10:17:34 1279
转载 C语言实现时间差计算
在很多情况下,为了评判某个算法,函数的优劣,特别是比较同一个功能的两个函数的效率高低时,我们经常通过计算耗费时间作为判断标准。C语言中有两个相关的函数用来计算时间差,分别是:time_t time( time_t *t) 与 clock_t clock(void)头文件: time.h计算的时间单位分别为: s , ms time_t 和 clock_t 是函数库time.h 中定义的用来...
2018-03-01 16:53:05 19980
Tiny4412应用测试软件源码
2018-11-11
敦泰--FT5X06 Android驱动框架分析-杨源鑫.pdf
2018-01-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人