建立讨论区的原因

作者:linuxer 发布于:2014-8-10 23:26

这个网站的名字叫做“蜗窝科技”,所谓蜗窝,就是蜗牛之家的意思,为那些愿意慢下来细细品味linux kernel中各种技术的“蜗牛”提供一个可以交流的平台。不过建站半年来,似乎广大人民群众参与度不够,使得这个网站看起来更像一个个人的博客。一个人的能力是有限的,写文章需要时间,在工作比较忙碌的时候,其实很难保持不断的更新。

基于上面的想法,一个叫做讨论区的板块被创建了。发表在其他的板块的文章都会是一个成体系的文章,描述技术的某个方面。但是,发表在这个板块的文章没有这个限制,一句感悟、一句抱怨、一点建议、技术问题、一些天马行空的想法等等都可以随意在这里交流,没有任何的限制,而且,这里的文章不会出现在主页,大家不必有心理压力,尽情的灌水、吐槽吧~~~~

评论(1) 浏览(8197)

傅立叶级数(Fourier Series)和周期现象

作者:linuxer 发布于:2014-8-7 20:09 分类:基础学科

如果你仔细观察,工作和生活中充满了周期现象:旁边linux driver工程师在调试audio driver的时候播放的1kHz的正弦信号,周末去公园游玩,游船推开水面的波纹,硬件工程师调试硬件电路的时候,示波器显示出来的晶振方波信号……

所谓周期现象具体包括时间上的周期现象和空间上的周期现象。1kHz的audio当然是时间上的周期信号,而水面的波形就是空间上的周期现象。对于空间上的周期现象,实际上就是一个pattern不断的重复。

对 于一个普通的人,我们可以感知时间的流逝,也可以感知空间的变化(我们可以通过眼睛、耳朵、触觉等build in在身体上的sensor来感知时空中的周期现象),因此,周期现象对于我们来讲就像呼吸一样自然。然而,你是否愿意从另外一个侧面来感知世界?那个世 界就是频域(frequency domain)的世界。描述时间上的周期现象我们使用频率(frequecy)这个词,也就是一秒重复的次数。

Can you feel frequency of the world?

阅读全文>>

标签: 傅立叶级数 Fourier Series

评论(14) 浏览(14474)

Linux kernel的中断子系统之(六):ARM中断处理过程

作者:linuxer 发布于:2014-8-4 18:26 分类:中断子系统

本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述:

1、第二章描述了中断处理的准备过程

2、第三章描述了当发生中的时候,ARM硬件的行为

3、第四章描述了ARM的中断进入过程

4、第五章描述了ARM的中断退出过程

本文涉及的代码来自3.14内核。另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除。

阅读全文>>

标签: irq handler 中断处理

评论(100) 浏览(93556)

linux内核中的GPIO系统之(2):pin control subsystem

作者:linuxer 发布于:2014-7-26 18:24 分类:GPIO子系统

在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况:

(1)启动一个新的项目后,需要根 据硬件平台的设定进行pin control相关的编码。例如:在bootloader中建立一个大的table,描述各个引脚的配置和缺省状态。此外,由于SOC的引脚是可以复用 的,因此在各个具体的driver中,也可能会对引脚进行的配置。这些工作都是比较繁琐的工作,需要极大的耐心和细致度。

(2)发现某个driver不能正常工作,辛辛苦苦debug后发现仅仅是因为其他的driver在初始化的过程中修改了引脚的配置,导致自己的driver无法正常工作

(3)即便是主CPU是一样的项目,但是由于外设的不同,我们也不能使用一个kernel image,而是必须要修改代码(这些代码主要是board-specific startup code)

(4)代码不是非常的整洁,cut-and-pasted代码满天飞,linux中的冗余代码太多

作 为一个嵌入式软件工程师,项目做多了,接触的CPU就多了,摔的跤就多了,之后自然会去思考,我们是否可以解决上面的问题呢?此外,对于基于ARM core那些SOC,虽然表面上看起来各个SOC各不相同,但是在pin control上还有很多相同的内容的,是否可以把它抽取出来,进行进一步的抽象呢?新版本中的内核(本文以3.14版本内核为例)提出了pin control subsystem来解决这些问题。

阅读全文>>

标签: pin control

评论(43) 浏览(114517)

Linux内核中的GPIO系统之(3):pin controller driver代码分析

作者:linuxer 发布于:2014-7-22 20:37 分类:GPIO子系统

对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,它驱动的硬件叫做pin controller(一般ARM soc的datasheet会把pin controller的内容放入GPIO controller的章节中),主要功能包括:

(1)pin multiplexing。基于ARM core的嵌入式处理器一般会提供丰富的功能,例如camera interface、LCD interface、USB、I2C、SPI等等。虽然处理器有几百个pin,但是这些pin还是不够分配,因此有些pin需要复用。例如:127号 GPIO可以做一个普通的GPIO控制LED,也可以配置成I2C的clock信号,也可以配置成SPI的data out信号。当然,这些功能不可能同时存在,因为硬件信号只有一个。

(2)pin configuration。这些配置参数包括:pull-up/down电阻的设定, tri-state设定,drive-strength的设定。

本 文主要描述pin control subsystem中的low level driver,也就是驱动pin controller的driver。具体的硬件选用的是S3C2416的硬件平台。既然是代码分析,本文不是非常多的描述框架性的内容,关于整个pin control subsystem软件结构的描述请参考TODO。

阅读本文需要device tree的知识,建议首先阅读device tree代码分析

阅读全文>>

标签: driver pin controller

评论(51) 浏览(105737)

linux内核中的GPIO系统之(1):软件框架

作者:linuxer 发布于:2014-7-21 14:40 分类:GPIO子系统

作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非 常简单的任务,例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师。虽然GPIO子系统相关的硬件比较简单,没有复杂的协议,不过,对于软件抽象而言,其分层次的 软件思想是每个嵌入式软件工程师需要掌握的内容。

我更倾向使用GPIO系统这个名字来代替GPIO driver这个名字,GPIO driver仅仅包含了pin signal状态控制和读取的内容,而GPIO系统包括了pin multiplexing、pin configuration、GPIO control、GPIO interrupt control等内容。本文主要是以3.14内核作为例子,讲述linux kernel中GPIO系统的软件框架。

阅读全文>>

标签: GPIO 软件框架

评论(49) 浏览(85337)

ACCESS_ONCE宏定义的解释

作者:linuxer 发布于:2014-7-17 12:34 分类:进程管理

在阅读RCU代码的时候遇到了ACCESS_ONCE这个宏定义,感觉比较有意思,因此独立出来一篇文档来描述它。

阅读全文>>

标签: ACCESS_ONCE

评论(0) 浏览(20603)

GIC驱动代码分析(废弃)

作者:linuxer 发布于:2014-7-4 14:34 分类:中断子系统

GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。GIC通过AMBA(Advanced Microcontroller Bus Architecture)这样的片上总线连接到一个或者多个ARM processor上。本文主要分析了linux kernel中GIC中断控制器的驱动代码。

具体的分析方法是按照source code为索引,逐段分析。对于每一段分析的代码,力求做到每个细节都清清楚楚。这不可避免要引入很多对GIC的硬件描述,此外,具体GIC中断控制器的 驱动代码和linux kernel中断子系统的交互也会描述,但本文不会描述linux kernel的generic interrupt subsystem。

本文以OMAP4460这款SOC为例,OMAP4460内部集成了GIC的功能。具体的linux kernel的版本是linux3.14.。

阅读全文>>

标签: GIC 代码分析

评论(19) 浏览(46516)

基本电路概念之(二):什么是电容?

作者:linuxer 发布于:2014-6-17 19:48 分类:基础学科

我儿子对电路板有一种近乎疯狂的痴迷,每次周末加班的时候,他总是恳求我带他一起到公司,就是为了能够看一看电路板、看一看电路焊接过程。为了不影 响工作,我只能是找一些废旧的电路板,加上从蜗窝同学那里搜刮来的电烙铁给小朋友进行电路焊接演示。废旧电路板上有不少的器件,于是问题少年的问题就来 了,芯片里面有什么?电路板是几层的?电容的内部结构是什么?……于是乎钳子、起子、剪刀等工具不断的登场,我们家里就是一片狼籍,各种电子元件支离破 碎……

其实打开一个普通的电解电容,里面的结构很简单,两个铝箔,一个绝缘纸卷在一起放到一个圆柱形的容器中,两个铝箔引出电容器的两个引 脚。那么它的具体功能是什么呢?当然,给小朋友解释很简单:就是用来存储小电子的,不过作为工程师,我们当然不能那么肤浅,本文的主题就一个:详细描述电 容的概念。

作为一个“数学控”,不拽上点数学总是觉得少了点什么。section 2描述了理解后续内容需要的数学基础,理解这个章节的内容需要单变量微积分和基本向量的知识。如果阅读者觉得痛苦,那么不要犹豫,直接跳过这个章节。 section 3描述了一些物理学的基础,如果这也不是你的菜,那么我建议你记住计算平板电容之间电场的公式即可,其他的可以无视。section 4主要描述电容的概念,这是本文的核心内容。

阅读全文>>

标签: 电容

评论(5) 浏览(24562)

计算机科学基础知识(一):The Memory Hierarchy

作者:linuxer 发布于:2014-6-16 19:54 分类:基础学科

一、前言

最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生 转到电子工程系学习,毕业后却选择了系统程序员这样的职业)。经过思考,我认为阻挡我称为一个优秀程序员的障碍是计算机科学的理论知识。自然辩证法告诉我 们:理论源于实践,又指导实践,她们是相辅相成的关系。虽然从业十余年,阅code无数,但计算机的理论不成体系,无法指导工程面具体技能的进一步提升。

计算机科学博大精深,CPU体系结构、离散数学、编译器原理、软件工程等等。最终选择从下面这本书作为起点:

s2547828

本文就是在阅读了该书的第六章的一个读数笔记,方便日后查阅。

阅读全文>>

标签: Memory Hierarchy cache 存储体系

评论(27) 浏览(43162)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog