- 博客(88)
- 收藏
- 关注
原创 就职历程
今年6月开始狠下心离职。说实在的,自从2009年毕业,到现在,一共呆了两家公司,两家公司我都很喜欢,和同事、和领导相处得很好。每一次的离开都带着深深的不舍。2012年4月从第一家公司离职,离职当天上午我还在疯狂的写着代码,为的就是满足某客户提出产品功能需求。当天下午研发部召开月总结会议,我的月报告ppt上没有拟定下月工作计划,研发经理很讶异,大老板向研发部同事通报我今天正式离职。晚上研发部聚餐
2013-07-26 15:22:37
1467
原创 Linux常用文件系统的制作命令
记录以前开发中制作过的Linux文件系统,记得以前为了评估文件系统的优越性,在用busy制作出文件系统目录通过各种文件系统工具将目录打包成各种文件系统格式:Ramdisk、Cramfs、ubifs、jffs2等。以下记录以前用过的脚本,其实都挺简单。1.cramfs#! /bin/shecho "Create RFODNCC_cramfs.img ..."mkfs.cramfs
2013-07-16 13:45:56
912
原创 ARM的异常及向量表
ARM具有7种异常,分别为:1、复位2、未定义指令3、软中断4、预取指令终止5、数据终止6、中断请求(IRQ)7、快速中断请求(FIQ) 用一句通俗的话去表达ARM的运行情况,那就是ARM总会在运行在以上7种异常情况的某一种之下。初初了解ARM时总会难于去了解这个"异常"是什么样的一个意思,到了现在对ARM有了一点肤浅的理解后,其实
2013-07-09 11:24:44
4164
原创 ARM的汇编学习
如果你还是学习电子通信的学生又或者是从事嵌入式电子通信工作的工程师、助理工程、实习生、打杂员,笔者想你也曾经对汇编有着复杂的恐惧,甚至是这一恐惧是大学里学《微型计算机技术》开始的。但是就笔者浅薄的工作经历看来,如果你能掌握或者退一步说能看懂汇编,那你才能享受到作为一名底层硬件程序员的乐趣。试想一下用汇编任意操纵一款ARM内核处理器的寄存器、内存空间、外设空间,把它玩弄于手掌之中,这样是不是很有成就
2013-07-08 17:36:46
958
原创 ARM架构的书籍
最早接触ARM时,是在2008年,那时是大三,那时ARM的学习板首推周立功的,但是价格高昂,所以ARM对于我们没有太多实验室资源的小本科来说是个很神秘的东西,开发板买不起,于是就到图书馆狂啃周立功的开发板配套书籍,那时觉得很经典。后来参加工作了,最早做就是ARM底层的东西,第一本接触到ARM架构的书籍是《ARM体系结构与编程》,读得很入味。后来又阅读了由国内翻译的一本国外书籍《ARM嵌入式系统
2013-07-08 14:01:10
6722
原创 ARM的开始
在笔者记录ARM的时候,忍不住有写写大学时候的那点破事。 话说第一次接触嵌入式微处理器还是大二参加全国电子设计大赛的那会。想那年的大赛真是风风火火,俨然相似于上世纪中下期全国总动员***(读者你们懂的了)。一把破烙铁就如火如荼没日没夜的焊...某日培训老师给我们每组发了一块ATmega16的小开发板,自此我的嵌入式电子生涯也拉开了帷幕。得到开发板后就是开始用ATmega16的io去驱动
2013-07-08 13:40:04
730
原创 常见的嵌入式Linux内核启动问题总结及解决方法
文章中总结分析了常见Linux启动时出现的控制台无打印信息、启动异常的现象,并给出相应的处理指导。对于这种开源的技术文章赞一个。Kernel - Common Problems Booting Linux
2013-07-03 16:59:30
971
原创 如何改变Linux内核的运行地址。
原厂的外文就好,介绍东西一针见血,很到位,跟看其他的中文资料比起来,看这种技术资料中有一种愉悦的感觉。HOWTO Change the Linux Kernel Start Address
2013-07-03 16:23:25
776
原创 Android makefile写法(Android.mk)
整理以前记录的关于针对将Android C/C++程序编译为可执行 / 静态库 / 动态共享库的Android.mk写法示例总结。1.可执行文件# Test exeLOCAL_PATH:=$(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= main.cLOCAL_MODULE:= test_exe#LOCAL_C_INC
2013-07-03 10:13:02
906
原创 WiFi联网的两种工作方式:点对点与基本模式
大家都知道WiFi(即IEEE 802.11b)作为有线网络的补充使用起来很方便,而且由于WiFi的灵活性很强,经常被用来独立组网,而其使用的工作模式就是点对点模式及基本模式两种,如何理解与区分这两种模式呢?下面简单说一下:1点对点模式WiFi联网的点对点模式是指无线网卡和无线网卡这间的通讯方式,即一台装配了无线网卡的电脑或移动计算终端(部分智能手机或平板电脑)连接进行通讯,对于小型无
2013-07-03 09:37:09
5330
转载 如何输出dev_dbg log
kernel里面默认都配置了CONFIG_DYNAMIC_DEBUG=y; 假如我们要打印acpuclock-krait.c中的 dev_dbg(drv.dev, "ACPU%d speed change complete\n", cpu); 在adb shell中输入: mount –t debugfs none /sys/kernel/debug
2013-06-26 15:09:15
1432
原创 Android中log及logcat命令的使用
1.log使用对于Android HAL/Framework可在Android系统源代码下通过以下方式使用log1.在程序文件中包含头文件#include 2.定义log的标签宏#define LOG_TAG "YOUR LOG TAG"3.修改对应.mk文件链接log库LOCAL_SHARED_LIBRARIES := liblog libcutils通
2013-06-21 14:25:24
1542
原创 GPS调试-1
GPS的一些基本知识GPS一般分为软和硬GPS,软GPS直接输出的是卫星数据,需要应用处理器对卫星数据进行解析计算,然后再转成标准的NMEA(National Marine Electronics Association,国际海洋电子协会)数据。而硬GPS可以在其芯片内部进行解析,直接向应用处理器输出NMEA数据。GPS的硬件接口相对简单,除开基本的供电、reset控制外,一般仅通过串口和
2013-06-19 16:19:08
1540
原创 Android中LCD背光驱动
其实Android的底层就是Linux,所以其驱动本质就是Linux驱动,但是这些Linux驱动是服务上层Android的,所以需遵循上Android的一些接口规范。所以涉及到的Android驱动都应应密切关注上层传递的接口。本文介绍的LCD背光驱动就是从上层一直往下层展现,但是笔者毕竟不是专注于Android上层,碍于知识不充裕,所以对上层的东西介绍得相对简单。1.Android的Setti
2013-06-17 16:28:40
4667
原创 U-boot中的倒计时可中断操作
在启动u-boot后,启动内核前会有个倒计时,在倒计时到时后,u-boot就是自动加载内核到内存,进去启动内核;但是在倒计时到之前通过(键盘输入)串口终端输入可以终止记时操作,进入u-boot命令行状态。今天在阅读TI OMAP平台 的在u-boot中的充电管理代码后再次发现使用了“倒计时可中断”操作,于是摘取了实现这种“倒计时可中断”的实现代码。方便日后移植使用。void time_re
2013-06-09 09:57:03
3352
原创 Android/Linux USB Gadget:三层架构
1.前言继Linux Gadget的一点研究后陆续续关注了很久Android USB Gadget,一直想写点什么记录一些认识,可是Linux USB实在是太复杂,让人有点无从下笔的感觉。它的复杂并不是说不可以被人理解,而且涉及的面很广。USB Host的驱动关注比较少,就对USB device驱动的认识来说,需从两大方面去对它进行认识和了解,一方面是USB协议本身,如果连USB端点、设备描述
2013-06-07 14:06:04
5754
1
原创 Android/Linux招聘要求
总结一些Android/Linux的招聘要求。A1.某公司招聘的高级Android驱动工程师1、计算机、电子、通信、自动化类等相关专业本科以上学历,5年以上Android驱动开发经验; 2、精通Andriod OS 系统体系架构;精通ARM、单片机硬件架构;精通Linux内核、有丰富的嵌入式开发经验;精通软件设计模型; 3、精通C/C++语言,熟悉ARM汇编语言; 4、精通Ar
2013-06-04 13:22:31
1193
翻译 Android init.rc文件浅析
本文主要来自$ANDROID_SOURCE/system/init/readme.txt的翻译.1 简述Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格
2013-05-30 17:23:38
716
原创 Android HAL:分析与总结
上接Android HAL:helloworld例程继续深入点学习。Android HAL:helloworld展示了编写HAL的一个架构。因为HAL最终会被编译层一个.so库文件被Native层调用,那么Native是如何找到这个.so,并打开这个.so呢?其实Native是通过调用hardware/libhardware/hardware.c中的已实现函数完成查找so和打开so的。
2013-05-30 09:35:38
966
原创 用户空间与内核空间的接口:sysfs
在调试驱动,或驱动涉及一些参数的输入输出时,难免需要对驱动里的某些变量或内核参数进行读写,或函数调用。此时sysfs接口就很有用了,它可以使得可以在用户空间直接对驱动的这些变量读写或调用驱动的某些函数。sysfs接口与proc文件系统很相似,有人将proc文件系统形容为Windows XP,而将sysfs接口形容为Windows 7。而在Android系统中,振动器、背光、电源系统等往往使
2013-05-27 10:18:22
2797
原创 用户空间与内核空间的接口:proc文件系统
最早在接触Linux BSP时,项目中有一项规格就是底层需向上层提供硬件PCB及BOM信息。由于在Linux的根文件系统/proc目录下有硬件CPU、内存、存储器等与硬件相关的信息,并且在用户空间通过cat命令就可以轻易获得,于是有个想法,就是设法将项目中硬件PCB及BOM等信息展现在/proc目录下,然后用户空间可以通过cat或通过读写文件的形式获得这些信息。所以就查阅了关于Linux proc
2013-05-27 10:17:41
1088
原创 Linux驱动调试手段:KDB
1.KDB介绍KDB是Linux内核调试补丁,提供一种在系统能运行时对内核内存和数据结构进行检查的办法。它不允许进行源代码级别上的调试。可以添加额外的命令,给出该数据结构的标识或地址。2.KDB操作a.处理器单步执行。b.执行到某条特定指令时停止。c.当存取(或修改)某个特定的虚拟内存位置时停止。d.当存取输入/输出地址空间中的寄存器时停止,通过进程ID对当前活动的
2013-05-24 15:53:24
1175
原创 Linux驱动调试手段:打印信息日志
1.printk1.1 printk的优点: a. 在中断中调用 b. 在进程上下文中调用 c.在持有锁时调用 d.在多处理器上同时使用1.2 printk的缺点: a.终端启动前无法调用1.3 printk打印信息的级别1.4 printk的使用eg. printk( KERN_WARNING“This is
2013-05-24 15:20:10
4621
原创 GStreamer:初识
GStreamer相当于windows下的Directshow,是一个在linux下创建媒体应用程序的框架。其主要用途是构建媒体播放器。GStreamer是基于插件的,具有任何符合规范的插件都可以方便的插于已定义的数据流管道的有点,因此可以简化媒体播放器的开发流程,提高可移植性。GStreamer由以下功能模块组成:1.元件(Elemenls):元件是GStreamer最重要的概念,它可以实现
2013-05-23 10:49:59
862
原创 嵌入式常用见笔试题
1.实现strcpy不调用库函数实现字符串拷贝函数:strcpy. /********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回值:目标串的地址。 * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。 * 参数: * strDestination 目标串 *
2013-05-21 13:43:06
1111
原创 守护进程:代码的分析
守护进程实现代码如下所示:[html] view plaincopyvoid daemon_mode(void) { int fr=0; fr = fork(); if( fr 0 ) { fprintf(stderr, "fork() failed\n"); exit(1);
2013-05-21 10:35:11
758
原创 网页转载
1.二叉树中的那些常见的面试题2.使用GStreamer实现一个MP3播放器3.补充GStreamer的详细介绍及实现一个MP3播放器的例程4.OMAP3 Audio驱动及框架,包含ALSA用户空间的编程架构5.TI 2.3Android方案系统架构详细介绍6. 制作openssh7. 制作dropbear8.用Eclipse和GDB构建ARM交叉编译和在线调试环境
2013-05-17 17:43:54
917
原创 Linux Gadget的一点研究之例程分析
学习Gadget比较有效的办法是掌握基本架构后,认真研读例程。其实不单Gadget如此,其他Linux驱动或子系统都是如此。另外Linux下的外设驱动通常有分层的概念,有带有面向对象的思想,因此研读代码是比较有效的领悟办法。一般一个Linux的USB设备驱动,包括两大部分,一是CPU USB控制器部分的驱动,驱动文件名往往是xxx_udc.c,此部分驱动很多是与硬件CPU相关,包含寄存器设置、
2013-05-17 14:47:46
2255
原创 Linux Gadget的一点研究之HID设备
接上文,配置编译gadget HID模块make modules后在driver/usb/gadget目录下生成g_hid.ko执行加载命令:root@rfODNCC:/mnt# insmod g_hid.ko insmod: can't insert 'g_hid.ko': No such device提示错误。在TI 技术论坛上看到相关技术回复:
2013-05-15 15:49:02
9445
6
原创 Linux Gadget的一点研究之U盘和USB虚拟串口
Linux kernel2.6以上的版本中,USB设备驱动的接口改为了gadget,在kernel/driver/usb/gadget目录下主要包含了平台USB UDC驱动和gadget接口驱动。 kernel/driver/usb/gadget目下的serial.c是一个常用的驱动文件,它可以配置为bulk传输驱动或CDC ACM驱动(USB转串口驱动)。配置的方式有两种,一可
2013-05-14 18:02:18
10677
3
原创 V4L2官方例程
V4l2的官网例程代码:/* * V4L2 video capture example * * This program can be used and distributed without restrictions. */#include #include #include #include #include /* getopt_lo
2013-05-13 17:59:06
3736
原创 移植嵌入式 Boa web server到TI 达芬奇平台
陆续记录移植过程。1.下载Boa源码a.到 http://www.boa.org/ 下载boa源码,目前最新版本为:0.94.13b.在主机上解压下载到的源码压缩包boa-0.94.13.tar.gz,执行:tar xzf boa-0.94.13.tar.gz2.生成makefile文件以上步骤解压后的目录为:boa-0.94.13进入src目录:cd src运
2013-05-10 11:18:40
1385
翻译 Linux flash 文件系统剖析
简介: 您之前可能听说过 Journaling Flash File System(JFFS)和 Yet Another Flash File System(YAFFS),但是您知道使用底层 flash 设备的文件系统意味着什么吗?本文将向您介绍 Linux® 的 flash 文件系统,并探索它们如何通过平均读写(wear leveling)处理底层的可消耗设备(flash 部件),并鉴别各种
2013-05-08 14:59:13
846
原创 Ubuntu 10.04下安装SVN图形界面客户端
1. 安装svn客户端:sudo apt-get install subversion2. 安装图形界面客户端Rabbitvcs:(1)下载 http://rabbitvcs.googlecode.com/files/rabbitvcs-0.13.2.tar.gz ,解压(2)安装下面的软件[plain] view plaincopy
2013-05-08 12:58:24
790
原创 TI ARM和DSP双核平台的一个编译例程
一个适用于TI ARM与DSP双核平台的makefile。该makefile示意了如何同时编译出ARM平台和DSP平台的执行文件,以便于比较ARM核和DSP核在进行运算时表现出来的性能差异。makefile############################################################################## Makefile
2013-05-07 14:48:31
1280
翻译 Linux的电源管理架构
设备电源管理Copyright (c) 2010 Rafael J. Wysocki, Novell Inc.Copyright (c) 2010 Alan Sternstern@rowland.harvard.edu *************************************************************本文由DroidP
2013-05-04 13:29:54
766
原创 Linux的开关中断
如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理。 这两个函数定义在 中: void local_irq_save(unsigned long flags); void local_irq_disable(void); 对 local_irq_save的调用将把当前中断状态保存到flags
2013-05-03 09:12:15
1281
转载 怎样写 Linux LCD 驱动程序
基本原理通过 framebuffer ,应用程序用 mmap 把显存映射到应用程序虚拟地址空间,将要显示的数据写入这个内存空间就可以在屏幕上显示出来;驱动程序分配系统内存作为显存;实现 file_operations 结构中的接口,为应用程序服务;实现 fb_ops 结构中的接口,控制和操作 LDC 控制器;驱动程序将显存的起始地址和长度传给 LCD 控制器的寄存器 (一般由 fb_set
2013-05-02 14:19:18
705
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人