摘要: 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。按照如下方法就可以成功编译出hello world模块驱动。1、首先确定本机linux版本怎么查看Linux的内核kernel版本?'uname'是Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版。配合使用'uname'参数可以查看当前服务器内核运行的各个状态。#uname -aLinux whh 3.5.0-19-generic #30-UbuntuSMPTue Nov 1 阅读全文
posted @ 2013-08-27 13:45 总是TMD后知后觉 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 一、U-boot第二阶段概述上面有两篇文关于u-boot第一阶段的介绍,这两篇文章是从网上找到的,由于分析的很详细,看完这后觉得对这两篇文章u-boot第一阶段的介绍已经比较完美了,所以分享出来。从这篇文章开始分析u-boot的第二阶段。如果你只把u-boot理解成引导kernel的一段代码的话,u-boot完全没有必要设计成现在这样的一种软件框架,直接写几个文件就能完成kernel的引导和启动。U-boot的功能很大一部还有起到调试的作用,也就是u-boot命令行的部分。所以它才有了现在这种相对比较复杂的框架。U-boot的第二阶段可以认为是初始化u-boot的软件框架,并实现引导kerne 阅读全文
posted @ 2013-08-26 17:18 总是TMD后知后觉 阅读(629) 评论(0) 推荐(0) 编辑
摘要: 一、实验目的学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。二、实验内容在Linux操作系统环境下重新编译内核。实验主要内容:A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36。B. 配置内核。C. 编译内核和模块。D. 配置启动文件。本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2.6.36);然后,配置GNU的启动引导工具grub,成功运行编译成功的内核。三、主要仪器设备(必填)Linux环境:utuntu10.10,linux内核2.6.35待编译内核:linux2.6.36四、操作方法和实验步骤【1】下载内核 阅读全文
posted @ 2013-08-26 15:31 总是TMD后知后觉 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 2.6内核的编译及内核树的建立---fedora core 5 标签:linux内核1. 在旧的版本下(如linux 2.4)linux内核模块的编译只需要有内核的头文件就行了,就可以通过和编译其他程序一样的方法编译成filename.o文件,这个.o文件是直接 可以加载道内核中的,加载之后就可以用了。然而在2.6下就截然不同了,在linux 2.6下内核的编译要有系统内核树的支持,下面介绍一下这个“内核树”是如何建立的。2. 本文的工作环境是Fedora Core 5,用“uname -r”查看内核版本是:2.6.15-1.2054_FC5Fedora Core 5 与旧版本不同,不包含 k 阅读全文
posted @ 2013-08-26 14:31 总是TMD后知后觉 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 直接写Makefile 文件(假设要编译的文件为hello.c)1 ifneq ($(KERNElRELEASE),)2 obj-m := hello.o3 else4 obj-m := hello.o5 KERNELDIR ?= /lib/modules/$(shell uname -r)/build6 PWD := $(shell pwd)78 default:9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules10 endif第一个ifeq ($(KERNELRELEASE),)目前,并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核 阅读全文
posted @ 2013-08-26 14:30 总是TMD后知后觉 阅读(1096) 评论(0) 推荐(0) 编辑
摘要: 如何编译linux驱动模块 首先,我们要了解一下模块是如何别被构造的。模块的构造过程与用户空间的应用程序的构造过程有显著不同;内核是一个大的、独立的程序,对于它的各个部分如何组合在一起有详细的明确的要求。Linux2.6内核的构造过程也与以前版本的内核构造过程不同;新的构造系统用起来更加简单,并且可产生更加正确的结果,但是它看起来和先前的方法有很大不同。 内核的构造系统非常复杂,我们所看到的只是它的一小部分。如果读者想了解更深入的细节,则应阅读在内核源码中的Document/kbuild目录下的文件。 在构造内核模块之前,有一些先决条件首先应该得到满足。首先,读者要保证你有适合于你的内核版.. 阅读全文
posted @ 2013-08-26 14:26 总是TMD后知后觉 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 1.什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 本文仅限于介绍linux下的库。 2.库的种类 linux下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。 3.库存在的意义 库是别人写好的现有的,成熟的,可以复用的代码,你... 阅读全文
posted @ 2013-08-21 15:02 总是TMD后知后觉 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.diybl.com/course/6_system/linux/Linuxjs/20071027/80547.html每个程序实质上都会链接到一个或者多个的库。比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等。无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dynamic libary)。链接到静态库会使你的程序臃肿,并且难以升级,但是可能会比较容易部署。而链接到动态库会使你的程序轻便,并且易于升级,但是会难以部署。静态库静态库也就相当于是把一系列的object文件放在同一个文件中(类似windows中的.lib 阅读全文
posted @ 2013-08-19 17:41 总是TMD后知后觉 阅读(327) 评论(0) 推荐(0) 编辑
摘要: ftok()#include#include函数原型:key_tftok(constchar*pathname,intproj_id);参数:pathname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽 然为int,但是只有8个比特被使用(0-255)。返回值:成功时候返回key_t类型的key值,失败返回-1msgget#include#include#include函数原型:intmsgget(key_tkey,intmsgflg);函数描述:建立消息队列参数:msgget()函数的第一个参数是消息队列对象的关键字(key),函数将它与已有的消息队列对象的... 阅读全文
posted @ 2013-08-19 11:49 总是TMD后知后觉 阅读(2589) 评论(0) 推荐(0) 编辑