自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 资源 (25)
  • 收藏
  • 关注

原创 话说Linux内核链表之“container_of“(二)

一、"container_of"简介       Linux内核中,"container_of“宏的使用时无处不在的。它的功能是:通过传入的结构体成员的地址、结构体类型以及成员的名字,返回对应结构体变量的起始地址。对于内核"list"来说,”container_of"使得把对链表的操作与链表管理的对象分离开来。好吧,先看一下定义吧,注意内核版本是Linux4.14.10,后面我们的分析都是基于这个版本,定义具体如下://linux4.

2020-08-20 08:07:15 690

原创 话说linux内核链表(一)

一、内容介绍链表作为一种基础的数据结构,分为:单链表、双链表以及循环链表,在日常的编程中很常用。在C语言的编程中,通常情况下,我们根据实际的需求来实现对应的链表。链表有:初始化、插入、删除、判空等操作。在linux内核中,对链表的使用真是无处不在的,比如设备、总线、驱动模型中,对挂载在总线上的设备和驱动就是分别各用一个链表进行管理的;又比如一个驱动可以作用于多个设备,那么"struct device_driver"中也有一个用于管理设备的链表。所以理解链表的实现原理以及熟练使用对理解内核代码、驱动开发至

2020-08-17 23:34:06 368

转载 Ubuntu16.04下搭建tftp服务器

1.安装tftp-serversudo apt-get install tftpd-hpasudo apt-get install tftp-hpa(如果不需要客户端可以不安装)tftp-hpa是客户端tftpd-hpa是服务器端2.配置TFTP服务器sudo vim /etc/default/tftpd-hpa将原来的内容改为:TFTP_USERNAME=”tft...

2018-06-02 17:22:54 1577

转载 LINUX热插拔

有 2 个不同角度来看待热插拔: 从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。 从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间程序(如hotplug、udev 和 mdev)的交互。 当需要通知用户内核发生了某种热插拔事件时,内核才调用这个用户空间程序。 现在的计算机系统,要求 Linux 内核能够在硬件从系统中增删时,可靠稳定地运行。这就对设备驱动作者增...

2018-04-07 22:15:41 3103

转载 module_param的介绍

一般用户态传递参数是通过main函数,第一个参数表示args个数,即argc,第二个参数表示具体的参数。在kernel态,无法通过这样的方式传递参数,一般使用module_param的方式,步骤如下: 1.使用module_param指定模块的参数 2.加载driver时给模块传递参数source code如下:#include <linux/init.h>#in...

2018-04-06 22:39:15 732

转载 linux内核调试技巧之一 dump_stack

在内核中代码调用过程难以跟踪,上下文关系复杂,确实让人头痛调用dump_stack()就会打印当前cpu的堆栈的调用函数了。如此,一目了然的就能看到当前上下文环境,调用关系了假设: 遇到uvc_probe_video这么一个函数,不知道它最终是被谁调用到的,根据linux设备模型,初步推测,probe应该是设备适配驱动时总线轮训到的。也只能是猜测,也根本无法猜测是否是中断上下...

2018-04-06 21:48:20 912

转载 IIC总线协议

处理器和芯片间的通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双方约定信号的协议。2、你的语速别人得能接受:双方满足时序要求。看IIC协议先:两条线可以挂多个设备。IIC设备(稍微有点智能的)里有个固化的地址。只有在两条线上传输的值等于我(IIC设备)的地址时,我才作出响应。开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信号。同

2017-02-24 10:04:22 576

转载 C语言测试

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。  从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCI

2017-02-23 16:44:35 894

转载 linux中 likely与unlikely

看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_e

2016-10-27 15:52:29 597 1

转载 Linux 内核 hlist 详解

在Linux内核中,hlist(哈希链表)使用非常广泛。本文将对其数据结构和核心函数进行分析。和hlist相关的数据结构有两个:hlist_head 和 hlist_node[cpp] view plain copy //hash桶的头结点  struct hlist_head {      struct hlist_node *first;//指向

2016-10-25 21:16:20 515

转载 Linux下spi驱动开发(2)

Linux下spi驱动开发之m25p10驱动测试作者:刘洪涛,华清远见嵌入式学院讲师。Linux下spi驱动开发之m25p10驱动测试目标:在华清远见的FS_S5PC100平台上编写一个简单的spi驱动模块,在probe阶段实现对m25p10的ID号探测、flash擦除、flash状态读取、flash写入、flash读取等操作。代码已经经过测试,运行于2.6.35内核。理解下面代码需要

2016-10-06 09:14:33 1026

转载 Linux下spi驱动开发(1)

Linux下spi驱动开发(1)一、概述基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基于SPI子系统开发的理论框架;第二部分以华清远见教学平台FS_S5PC100上的M25P10芯片为例(内核版本2.6

2016-10-06 09:13:30 1828

转载 NandFlash ECC 校验算法原理与实现

ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出错。ECC能纠正1个比特错误和检测2个比特错误,而且计算速度很快,但对1比特以上的错误无法纠

2016-09-28 16:31:23 6416

转载 SLC和MLC NAND Flash

SLC和MLC的价格差很多,比如256M的SLC nand价格就和1G的MLC nand一样。MLC优势确实正在日益凸显,很快就会成为闪存的主力。至于说它存储慢、安全性低,这个都是很久以前的事情了,随着各大芯片生产商对它的完善,现在MLC技术已经比较成熟,这些问题也就模糊了。Flash闪存是非易失性存储器,这是相对于SDRAM等存储器所说的。即存储器断电后,内部的数据仍然可以保存。Flash根

2016-09-28 10:13:38 583

转载 使用u-boot引导smart210提供的内核,卡在了“Starting kernel ...”

大家好,我问个问题,使用u-boot引导友善smart210提供的内核,卡在了“Starting kernel ...”。我百度了很久都没能解决。。。不知道大家有没有处理过这个问题的经验?谢谢!直接go zImage也不行。gcc:4.9.2u-boot:2014.07linux内核:3.0.8(config已配置好串口,使用superboot引导是可以打印的)boot

2016-09-27 17:26:36 2350

转载 SDRAM中数据掩码DQM的作用

DQM就是掩码控制位.在sdram中,每个DQM控制8bit Data在读操作的时候没什么大的影响,比如你读32位的sdram module, 但你只要其中低8bit的数据,没有关系,只要读出32bit数据,再在软件里将高24位bit和0"与"就可以了,有没有DQM关系不大.但在执行写操作时,如果没有DQM,你就麻烦了,可能你在软件上是写一个8bit数据,但实际上32根数据线是物理存在板上连接到S

2016-09-27 17:24:18 2764

转载 Ubuntu 16.04[64bit]嵌入式交叉编译环境arm-linux-gcc搭建过程图解

开发裸机环境之前需要先搭建其开发环境,毕竟工欲善其事必先利其器嘛。  安装步骤1、准备工具安装目录将压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个目录下,这个目录就是你等会解压缩的目录,以后这个目录就不能随便删掉了,我的存放路径是/home/aldrich/arm,如下图,记住这个路径,等会还会用到。  .tar.gz 和.tgz解压:ta

2016-09-26 18:12:10 37940 16

转载 Ubuntu下搭建tftp服务器最简单方法

今天开始调试ARM的板子,要通过tftp下载到板子上,所以又要配置tftp服务器,真的烦死了... (本人酷爱装系统,所以经常都要搞配置)因为之前已经在Ubuntu下搭建过很多次tftp服务器了,但是一直记不住那一个配置文件的名字(记性太差),所以每次都要百度。可是每次百度出来的结果都不一样,而且出入很大,有的过程相当的繁琐,不仅很麻烦,而且搞到最后还没有配置成功。所以干脆写个日志记下来。

2016-09-26 08:59:33 423

转载 uboot的relocation原理详细分析

最近在一直在做uboot的移植工作,uboot中有很多值得学习的东西,之前总结过uboot的启动流程,但uboot一个非常核心的功能没有仔细研究,就是uboot的relocation功能。这几天研究下uboot的relocation功能,记录在此,跟大家共享。自己辛苦编辑,转载请注明出处,谢谢!所谓的relocation,就是重定位,uboot运行后会将自身代码拷贝到sdram

2016-09-25 11:28:00 569

转载 U-Boot移植——链接地址、运行地址、加载地址、存储地址

1 运行地址/链接地址    根据参考资料[1]的说明,运行地址和链接地址是等价的,只是两个不同的说法而已,指的是程序在SRAM、SDRAM中执行时的地址,就是执行这条指令时,PC应该等于这个地址,换句话说,PC等于这个地址时,这条指令应该保存在这个地址内[1]。    然而,根据参考资料[5]的分析,运行时地址与链接地址有时候是不一致的[6],例如U-Boot开始启动的其_start标号

2016-09-25 10:14:43 1187

转载 Arm汇编 位置无关代码 adr 指令

adr     r0, _start  得到的是_start的当前执行位置,由 pc+offset 决定的 得到有效地址ldr     r0, =_start  得到的是绝对的地址,链接时决定;------------------------------------------------------------------------/* 重定位Boot代码到RAM内存,将Boot代

2016-09-24 20:24:17 1054

转载 ARM协处理器CP15寄存器详解

用于系统存储管理的协处理器CP15MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2coproc         指令操作的协处理器名.标准名为pn,n,为0~15 opcode1      协处理器的特定操作码. 对于CP15寄存器

2016-09-22 21:27:03 1307

转载 GNU ARM汇编--(三)ARM处理器的基本原则

这一篇的知识来源全部来自《ARM System Developer's Guide》        从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示:                数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而h哈佛结构体系的arm核就

2016-09-21 09:14:54 316

转载 GNU ARM汇编--(二)汇编编译链接与运行

GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对GNU汇编器有一个大概的认识,同时通过两个例子了解一下GNU ARM汇编.     给出一个模板文件:[cpp] view plain copy     .text

2016-09-21 08:42:13 642

转载 arm程序的反汇编程序 试读

我们以一个小程序来学习如何分析反汇编程序 这是汇编源文件:MCU:S3C2440(arm920T)代码实现点亮个led小灯.text.global _start_start:        ldr r0,=0x56000010        @GPBCON        mov r1,#0x00000400        @        str r1,[r

2016-09-20 10:43:37 510

转载 GNU ARM汇编--(一)开篇

在大学的时候,汇编就是学的很烂.一是对汇编这门语言没概念,二是那些指令集很难记清楚,用的机会也少,自然学的不好.但是现在觉得相当有必要重头学习一下汇编.部分原因我在上一篇写完设备模型的总结时提到了而.最近在看一本书《ARM:Assembly Language Programming》,作者是Peter Knaggs & Stephen Welsh.作者在开头也提出学习汇编的必要性和重要性,借他们的

2016-09-20 07:38:12 387

转载 arm-linux-gcc: 没有那个文件或目录

最近弄了个4412的板子(友善之臂的Tiny4412增强版),准备搞搞android,开发服务器用的是Ubuntu12.04-64bit版本(对于Android 2.3.X和更新的版本,需要64位的系统,之前的老版本2.2以下(包括2.2)可以 在32位版本上编译,另外不推荐虚拟机,因为官网上写的虚拟机配置过于变态,要16G的RAM/swap和30G以上的硬盘,速度上也不会很理想)用友善提供的

2016-09-10 16:21:06 9695 3

转载 走马观花: Linux 系统调用 open 七日游(七)

【场景三】open(pathname, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)    在这个场景中我们希望创建一个新文件(O_CREAT),并赋予该文件用户可读(S_IRUSR)和用户可写(S_IWUSR)的权限,然后以只写(O_WRONLY)的方式打开这个文件。O_EXCL 在这里保证该文件必须被创建,如果该文件已经存在则失败返回。

2016-05-23 18:03:11 625

转载 走马观花: Linux 系统调用 open 七日游(六)

还记得在上一个场景中,build_open_flags 里面有一个对标志位 O_PATH 的判断么?现在我们就来看看这个标志位是干啥的:【场景二】open(pathname, O_PATH)    这个 O_PATH 似乎是不常用的,咱们先看看它的使用说明:【open(2)】http://man7.org/linux/man-pages/man2/open.2.htmlO_

2016-05-23 18:01:47 1230

转载 走马观花: Linux 系统调用 open 七日游(五)

回到 path_openat:【fs/namei.c】sys_open > do_sys_open >do_filp_open >path_openat点击(此处)折叠或打开  ...    error = do_last(nd,&path, file, op,&opened, pathname);    while (unlikely(

2016-05-23 18:00:44 1815

转载 走马观花: Linux 系统调用 open 七日游(四)

现在,我们的“路径行走”只剩下最后一个小问题需要处理了——符号链接。【fs/namei.c】sys_open > do_sys_open >do_filp_open >path_openat >link_path_walk点击(此处)折叠或打开  ...        if (err){            err = nested

2016-05-23 17:59:44 1246

转载 走马观花: Linux 系统调用 open 七日游(三)

接着上回,当对“.”和“..”处理完成后就直接返回进入下一个子路径循环了,但如果当前子路径不是“.”或“..”呢?【fs/namei.c】sys_open > do_sys_open >do_filp_open >path_openat >link_path_walk > walk_component点击(此处)折叠或打开  ...    e

2016-05-23 17:58:48 1540

转载 走马观花: Linux 系统调用 open 七日游(二)

接着昨日的旅程,我们应该开始处理具体的子路径了:【fs/namei.c】sys_open->do_sys_open->do_filp_open->path_openat->link_path_walk点击(此处)折叠或打开  ...        err = walk_component(nd,&next, LOOKUP_FOLLOW);        

2016-05-23 17:57:55 1665

转载 走马观花: Linux 系统调用 open 七日游(一)

友情提示:您需要一个 kernel 3.15.6,下载地址:https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.15.6.tar.xz    我们将以 Linux 系统调用 open 为主线,参观游览 Kernel 的文件系统,一窥 Kernel 文件系统精妙的设计和严谨的实现。因受篇幅限制,我们此次观光只涉足 Kernel 的虚拟文件系统

2016-05-23 17:56:25 548

转载 Linux那些事儿之我是Sysfs(final)后记

关于sysfs的介绍就到这里。文笔不如大哥甲幽默,希望我写的这些咚咚对大家有所启发,帮助。把东西看懂是一回事,写出来又是另一回事。写到想吐血...但是写得过程中,可以使自己的理解更深一层,更有逻辑。授人以鱼不如授人以渔,学习linux内核最好的方法就是Reading the f**king source code。 推荐用source insight看代码,外加KDB调试,挺方便的。另外,除了li

2016-05-17 17:51:37 229

转载 Linux那些事儿之我是Sysfs(13)举例四:sysfs读入普通文件内容

跟上回一样,我用这个小程序来读#include stdio.h>#include fcntl.h>#include unistd.h>int main(){              char *name = "/sys/bus/ldd/version";              char buf[500];              int fd;     

2016-05-17 17:50:34 334

转载 Linux那些事儿之我是Sysfs(12)举例三:sysfs读入文件夹内容

上回我们说到,如何创建文件夹和文件。我们发现,在sysfs中,inode并不那么重要。这是因为我们所要读写的信息已经就在内存中,并且已经形成了层次结构。我们只需有dentry,就可以dentry->fsdata,就能找到我们读些信息的来源 ---  sysfs_dirent结构。这也是我觉得有必要研究 sysfs的原因之一,因为它简单,而且不涉及具体的硬件驱动,但是从这个过程中,我们可以把文件系统

2016-05-17 17:49:01 626

转载 Linux那些事儿之我是Sysfs(11)sysfs 创建普通文件

最近彭宇的案件炒得沸沸扬扬,究竟这个社会怎么了?sysfs文件系统中,普通文件对应于kobject中的属性。用sysfs_create_file(),参数如下:sysfs_create_file(struct kobject * kobj, const struct attribute * attr) 传给它的参数是kobj和attr,其中,kobject对应的是文件夹,attribu

2016-05-17 17:48:07 414

转载 Linux那些事儿之我是Sysfs(10)sysfs 创建目录

每当我们新增一个kobject结构的时候,同时会在/sys下创建一个目录。kobject_add()  ->  create_dir() -> sysfs_create_dir()此时,我还想重申,kernel代码的更新换代是很快的,我们的目的是懂得代码背后的原理,知识,或曰哲学。我不想讲的太细,因为关于sysfs的部分从2.6.10到现在2.6.22已经改了很多了。但其总体架构没变。写此

2016-05-17 17:46:46 322

转载 Linux那些事儿之我是Sysfs(9)sysfs文件系统模型

最近Linus炮轰C++,“C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’”。牛人就是牛气冲天阿。在fs/sysfs/下面,除去makefile,还有8个文件。其中, bin.c, file.c, dir.c, symblink.c分别代表了在sysfs文件系统中当文件类型为二进制文件,普通文件,目录,符

2016-05-17 17:45:34 672

深入理解linux内核(英文)pdf

这是经典的《深入理解linux内核》的英文pdf版本,如果你正在学习或者研究linux内核,希望对你有帮助!

2015-03-10

Linux内核设计与实现英文原版

这是一本讲解linux内核的经典书籍,相对于经典的《深入理解linux内核》更适合于初学者,如果你正在学习或研究相关的东西,希望对你有帮助

2015-03-04

ldd3英文原版书以及源码

这是ldd3的英文原版书以及相应例程的源码,希望对正在学习linux驱动的朋友们有所帮助

2014-12-31

构建属于自己的AVR操作系统

资源里面包含在AVR上写的简单的操作系统,以及相应的程序,希望对需要的朋友有所帮助

2014-12-29

跟我一起写Makefile

这是网上很流行的学习Makefile的教程《跟我一起写Makefile》的pdf教程,如果你正在学习编写Makefile,可能它会对你很有帮助!

2014-07-30

汇编s5pv210中断

上传的资源是用汇编实现的s5pv210的外部中断的程序,开发板是:友善的tiny210.如果你正在学习arm汇编,希望对你有所帮助!

2014-07-18

uboot的start.s文件解释

这是一个介绍uboot的start.s函数的文档,写的相当详细,如果你正在从事相关的工作或者相应的学习,你可以参考参考,希望对你有所帮助!

2014-07-15

ARM体系结构与编程pdf

这是一本讲解arm的体系结构的书,如果你从事相关的学习或者开发,这本书会给你带来很大的帮助

2014-07-14

STM32-whole reference mannual

这是stm32f103rbt6的详细数据手册,在上面可以看到所以的寄存器,如果不是用意法半导体提供的库开发的话,这个手册非常有帮助,希望对大家有所帮助!

2014-07-01

串口调试助手

这是一款很经典的串口调试助手,作者是“聂小猛-丁丁”,自己一直在用,希望对大家有用!

2014-05-16

usb-monitor7.12

这是一款usb监控的软件,版本是usb-monitor7.12,压缩包里有破解及破解的说明,我的电脑上是win7的32的系统,用起来是好使的,其他的系统没有做测试,希望对正在学习usb的朋友一点帮助!

2014-05-16

win7的超级终端

这是一款win7的超级终端,许多人在win7开发嵌入式时可能碰到没有超级终端的问题,这是一款不错的,我自己在win32位下使用正常,win7没有测试

2014-03-27

smart210-leds.c

这是友善smart210核心板上的四个led的驱动程序,这里贴出来这是为了大家方便查看

2014-02-22

Android-jni-test for smart210-led

这是我自己写的通过JNI调用Linux内核中的驱动程序来完成Android上层应用程序的代码,硬件开发平台式友善的smart210,在他家自带的系统上直接做的应用程序,希望对大家有用

2014-02-22

Visual+C++6.0

这是一款VC++6.0的软件,只有三十多M,对于学习和验证c很方便,当然要是专业开发的人员就不太实用了,不管怎么说,都希望能给大家带来方便!

2013-09-28

S5PV210的数据手册

这是三星S5PV210的数据手册,在网上不是很容易找,这里给大家共享一下,希望对大家有用!

2013-09-16

tftp服务器安装包

这是在linux下建立tftp服务器的三个安装包,通过安装这三个包,就能建立tftp服务器

2013-09-01

友善mkimage

编译linux操作系统时,需要的文件,如果没有这个文件,编译的时候会出现错误,所以提供给大家

2013-09-01

tiny210-u-boot

这是友善tiny210开发板的u-boot,里面包含两个文件,u-boot的源代码和直接烧写的.bin文件

2013-09-01

友善eeprom测试程序

此源程序是友善之臂提供的eeprom在linux上层的测试程序

2013-08-03

空空如也

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

TA关注的人

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