嵌入式编程
文章平均质量分 67
alex_xhl
专注软件架构设计,性能分析和优化。
展开
-
常用GCC编译命令总结及其他Linux命令总结
1.直接编译一个test.c文件 gcc -EL test.c -o test 生成test是可执行文件. 2.只生成.o文件,为打包生成库文件准备 gcc -c hello.c 生成hello.o的目标文件. 3.生成静态库文件 ar -r libhello.a hello.o 生成libhello.a静态库文件. 4.生成动态库文件原创 2012-10-14 13:38:25 · 6301 阅读 · 0 评论 -
关于mount nfs时-o nolock的问题
需要将在linux里交叉编译好的程序放在arm上运行,所以首先要将程序copy至arm上,选择了nfs。 但在arm上mount nfs的时候遇到了失败的情况: 在网上查找解决方案: nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。 解决方法:kill 文件锁(lockd)或者mount -转载 2012-01-31 17:04:30 · 23573 阅读 · 5 评论 -
uboot移植
目标平台NANO2410A目录CPUS3C2410 (ARM920T)Nand FLASHK9F1208 (64M*8bit)SRAMHY57V561620 (4banks*4M+16Bit)准备工作我的移植工作是基于1.3.2来进行的,因为在网上看到1.3.3之转载 2012-01-31 08:52:00 · 887 阅读 · 0 评论 -
U-Boot移植
BOOT LOADER(引导装载器),是用于初始化目标板硬件,给嵌入式操作系统提供板上硬件资源信息,并进一步装载、引导嵌入式操作系统运行的固件。在嵌入式系统开发过程中,很多情况都会涉及底层BOOT LOADER的移植问题,即使在有些已有BOOT LOADER的参考开发板上也存在这种可能。概括来说,如下情况会考虑进行BOOT LOADER的移植工作:A. 在自主设计的目标板上,用于引导嵌入式操作转载 2012-01-31 08:58:13 · 829 阅读 · 0 评论 -
uboot移植记录之一
uboot移植记录之一uboot整个移植过程我们可以分为三个阶段:一,移植可以从Nor flash启动的uboot这个阶段是移植一个最简单的uboot,可以烧在Nor flash内运行.二,移植支持Nand flash驱动的uboot加入Nand flash驱动的支持,可以在uboot命令行下操作Nand flash.但还未能从Nand flash启动,只能在Nor fla转载 2012-01-31 08:50:37 · 730 阅读 · 0 评论 -
UBOOT移植
u-boot的Makefile分析 U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。 U-BOOT的下载地址: http://sourceforge.net/projects/u-boot 我下载的是1.1.6版本,一开始在FTP上下载了一个次新版,结果编译失败。1.转载 2012-01-31 08:49:27 · 1539 阅读 · 0 评论 -
linux内核编译之旅
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux的一个重要的特点就是其源代码的转载 2010-06-11 19:34:00 · 613 阅读 · 0 评论 -
看看
http://hi.baidu.com/lincoln%5Flai/blog/category/Ldd原创 2010-07-06 14:30:00 · 673 阅读 · 0 评论 -
Linux Kernel Module编程,多个源文件编译成一个模块的解决方案
陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。但是,在.h文件中写函数的实现总感觉怪怪的。今天查看了以下Kbuild的文档,有如下描述: If a kernel module is built from several sourc转载 2010-07-07 17:50:00 · 4326 阅读 · 2 评论 -
写给Linux内核新手-关于Linux内核学习的误区
关于Linux内核学习的误区 先说句正经的:其实我没资格写这篇文章,因为自己也就一两个月以来才开始有所领悟的。因此,这里与其说是关于Linux内核学习的经验,不如说是自己的教训吧,希望不要扔鸡蛋砸我^_^ 常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的转载 2010-08-10 11:30:00 · 701 阅读 · 0 评论 -
打印调试技术 printk klogd dmesg
4.2.1. printk#include printk(KERN_CRIT"error %s,%i",__FILE__,__LINE__);注:1). printk函数中能够指定优先级,假如printk没有指定优先级,采用默认优先级,DEFAULT_MESSAGE_LEVEL,其值在kernel/printk.c. 头文档linux/printk.h中宏定义了8个级转载 2010-09-03 13:40:00 · 1002 阅读 · 0 评论 -
linux device driver .ko module Makefile 模板
## Makefile module first.ko#CROSS_PATH:=../../mips-4.3/binCROSS_ARCH:=ARCH=mips CROSS_COMPILE=$(CROSS_PATH)/mips-linux-gnu-DEVICE=firstifneq ($(KERNELRELEASE),) obj-m:=$(DEVICE).o $(DE原创 2010-09-08 10:08:00 · 1503 阅读 · 0 评论 -
测试NAND Flash稳定性小程序
下面的程序可以用来测试NAND Flash 稳定性,主要思想是反复读写NAND Flash上的文件及对比读写是否一致,最后统计结果。test.c#include #include #include #include #include #include int main(int argc, char **argv){if(argc原创 2012-02-05 10:05:21 · 3717 阅读 · 0 评论 -
linux中Framebuffer的原理及实现机制
linux中Framebuffer的原理及实现机制*一、FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这 个设备来供用户态进程实现直接写屏转载 2012-02-06 17:42:57 · 705 阅读 · 0 评论 -
填充文件后面为0xFF到指定大小
以下程序可以填充文件后面全部为0xff到指定大小.test.c#include /* * Return: 0, OK* -1, Fail*/unsigned long int appendFile(char *destFilePath, unsigned long int appendLength){ unsigned原创 2012-02-07 09:08:43 · 3706 阅读 · 0 评论 -
搭建交叉调试环境arm-linux-gdb与gdbserver
搭建交叉调试环境arm-linux-gdb与gdbserver2013-01-10 09:19:34分类: 嵌入式操作系统:Ubuntu9.04开发板:博创2410s交叉编译工具:arm-linux-gcc-4.1.1gdb+gdbserver 是调试目标板的常用方法.网络环境如下:HOST 192.168.1.123 Target: 192.16转载 2013-03-29 16:11:59 · 678 阅读 · 0 评论 -
curl 使用
1.编写源文件 curl.c#include #include #include int main(int argc, char *argv[]){ CURL *curl; //定义CURL类型的指针 CURLcode res; //定义CURLcode类型的变量 if(argc!=2) { print原创 2013-03-12 16:47:55 · 1004 阅读 · 0 评论 -
cross compile ethtool
http://www.kernel.org/pub/software/network/ethtool/ethtool - utility for controlling network drivers and hardwareIntroductionethtool is the standard Linux utility for controlling network dri原创 2012-11-06 14:48:16 · 2414 阅读 · 0 评论 -
cross compile tcpdump tool
cross compile tcpdump:step 1: down libpcap-1.3.0.tar.gz form http://www.tcpdump.org/step 2: down tcpdump-4.3.0.tar.gz form http://www.tcpdump.org/step 3: tar xvf libpcap-1.3.0.tar.gzstep 4: ta原创 2012-11-06 10:52:22 · 1247 阅读 · 0 评论 -
Mips GNU工具链简介
Mips GNU工具链简介 1 . 总括 本文分三部分来介绍mips的工具链,首先工具链的总括,其次是每个工具链的简介,最后是各工具链的实际应用举例。我们的项目使用的工具链就如图1所示, 声明,本文所述的内容实乃GNU工具链的九牛之一毛,日后会陆续更新。2.工具链简介 下边就以列表的方式,对每一个工具链的作用进行介绍,在下一章进行实例演示。转载 2012-11-01 17:24:29 · 6087 阅读 · 1 评论 -
GPIO模拟类I2C总线基础函数实例
我们先了解一下I2C总线基础知识.I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线的概念 I2C 总线支持任何IC 生产过程(NMOS CMO原创 2012-10-16 18:41:40 · 1336 阅读 · 0 评论 -
GCC 编译动态链接库和静态链接库 + 大型工程Makefile编写 + Linux环境变量的设置和查看方法
GCC 编译使用动态链接库和静态链接库 1 库的分类根据链接时期的不同,库又有静态库和动态库之分。静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用。2 静态库和动态库的比较链接静态库其实从某种意义上来说也是原创 2012-10-14 13:00:19 · 6804 阅读 · 0 评论 -
Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)
Linux下的C编程实战(一)――开发平台搭建1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。在嵌入式操作系统方面,Linux的转载 2012-10-12 11:12:18 · 3448 阅读 · 0 评论 -
ffmpeg开发指南
FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.TCPMP, VLC, MPlayer等开源播放器都用到了FFmpeg。 一、转载 2012-03-06 18:14:04 · 2255 阅读 · 4 评论 -
linux 内核空间和用户空间
Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间"。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为"用户空间)。因为每个进程可以通过系统调用进入内核,因转载 2012-03-01 09:45:36 · 661 阅读 · 0 评论 -
预处理器 包含Linux特性的资料
一.前言1.编译一个C程序涉及很多步骤。其中第一步骤称为预处理(preprocessing)阶段。C预处理器(preprocessor)在源代码编译之前对其进行文本性质的操作。2.它的主要任务包括删除注释、插入被#include指令包含的内容、定义和替换由#define指令定义的符号以及确定代码的部分内容是否应该根据一些条件编译指令经行编译。二.预定义符号1.以下为预处理器定义的符转载 2012-02-15 11:30:46 · 703 阅读 · 0 评论 -
hello: module license 'unspecified' taints kernel.
测试驱动开发平台为了后续学习的顺利进行,我们利用最简单的hello,world程序,在内核上挂载和卸载我们自己编写的hello模块。说明:本文调试环境VMware Workstation 5.0+TurboLinux 10,教材是《Linux Device Drivers》第3版英文电子图书。一、编写hello.c文件利用vi编辑器,我们键入下面的代码,并保存为hello.c文件。转载 2010-09-10 09:33:00 · 5561 阅读 · 0 评论 -
在kernel中编译单独的.ko
~/kernel-x-x-xx$ make modules SUBIDR=./drivers/mydriver/ [转]参考资料:单独编译ntfs.ko模块,使你的CentOS完全支持ntfs参考:http://hi.baidu.com/zngell/blog/item/f70702f427dbdf67ddc47457.htmlhttp://li原创 2010-09-14 15:25:00 · 3007 阅读 · 0 评论 -
linux 设备驱动开发详解 code (5)
1.c code: #include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "hello world enter/n"); return 0;}static void hello_exit(void)原创 2010-12-09 22:44:00 · 559 阅读 · 0 评论 -
linux内核符号表
内核符号:存在内核空间函数或变量所对应的符号 内核符号表可以分为“私有”和“公共”。平常所说的内核符号表指的是“公共内核符号表”。 我们知道,驱动存在于内核空间,它的每一个函数每一个变量都会有对应的符号,这部分符号也可以称作内核符号,它们不导出的话就只能为自身所用,导出后就可以成为公用,对于导出的那部分的内核符号就是我们常说的内核符号表。in转载 2010-12-13 21:56:00 · 1822 阅读 · 0 评论 -
linux makefile 全攻略
一、Makefile介绍 Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。 Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文转载 2010-12-28 22:14:00 · 1232 阅读 · 0 评论 -
跟我一起写 Makefile
概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会转载 2010-06-11 09:17:00 · 762 阅读 · 0 评论 -
不错的网站
红联linux: http://www.linuxdiyf.com/bbs/编程与内核: http://www.linuxdiyf.com/bbs/forum-9-1.html海明老师Linux版视频收集贴:http://www.boobooke.com/bbs/viewthread.php?tid=4623原创 2010-06-13 19:36:00 · 532 阅读 · 0 评论 -
linux sd卡驱动分析,基于mini2440,sdio mmc sd卡驱动编写
参考资料: 1.SD Memory Card Specifications / Part 1. Physical Layer Specification; Version 1.0 2.LDD3 CHAPTER-16 BLOCK DEVICE3. http://www.sdcard.org引言:前几天把mini2440 的sd 卡驱动程序移植到了Android 平转载 2010-06-25 19:22:00 · 172 阅读 · 0 评论 -
内核中的Makefile和Kconfig
一、概述 在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题,并且要根据用户配置来编译特有的内核。为了解决这个问题,内核使用两种文件,Makefie和Kconfig。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单,就是我们使用命令 make menuconfig(或者xconfig)后产生的配置转载 2010-07-07 16:15:00 · 711 阅读 · 0 评论 -
如何编写Linux设备驱动程序
Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与L转载 2010-09-06 18:05:00 · 564 阅读 · 0 评论 -
Download new linux kernel, make
1.Download new linux kernel: url : http://www.kernel.org2. tar: tar -jxvf linux-x-y-z.tar.bz23.make make menuconfig ---> .config 4. if you happen to error as follow: make原创 2010-10-24 15:50:00 · 729 阅读 · 0 评论 -
Linux系统调用与文件I/O
1.1 Linux系统调用 所谓系统调用是指操作系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的特殊服务。 在linux中用户程序不能直接访问内核提供的服务。为了更好的保护内核空间,将程序的运行空间分为内核空间和用户空间,他们运行在不同的级别上,在逻辑上是相互隔离的。1.2 用户程序接口(API) 在转载 2010-12-05 18:06:00 · 999 阅读 · 0 评论 -
linux 设备驱动开发详解 code (3)
1.c code: #include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000#define MEM_CLEAR 0x01#原创 2010-12-09 22:40:00 · 640 阅读 · 0 评论 -
linux 设备驱动开发详解 code (4)
1.c code: #include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000#define MEM_CLEAR 0x01#原创 2010-12-09 22:43:00 · 829 阅读 · 0 评论