易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux 设备驱动程序进阶(0)

很久没有写技术博文了,从这里开始我的研究生生涯,转眼就要在职场上养家糊口,生活真的不容易,幸好还有技术相伴为伍。
由于工作的关系,终于接触到linux网络和kernel的编程,总体来说总是一个好的契机。让我能够深入操作系统内核。做过一段时间的用户程序的开发,总是在Windows平台上,终于有机会在linux上做点东西,还是很兴奋的。
首先是一个Hello World的内核程序,然后就是一大堆编译的问题,由于没有接触过Linux所以花费了很多时间在这上面。
1) hellokernel.c 我的编译环境是在虚拟的Linux Redhat 5.0 上编译的
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL"); //这个宏的意思我还是不太明白,直接抄了过来
static int hello_init(void)
{
    printk(KERN_ALERT"Hello,world\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT"Goodby,cruel world\n");
}
module_init(hello_init);  //当内核模块被装载的时候调用hello_init函数
module_exit(hello_exit); //当内核模块被卸载的时候调用hello_exit函数
2)源代码准备好了之后下面就是编译的问题
step1:  准备好linux内核源代码,注意版本号要与主机一致,这里因为我直接在主机(Linux机器)上编译,所以不存在交叉编译的问题。查看linux机器的内核版本号有很多命令,我用的是uname -r
[root@localhost ~]# uname -r
2.6.18-128.el5
看到内核版本之后就可以在官网上下载对应版本的内核。http://www.kernel.org/pub/linux/kernel/v2.6/在这里找到linux-2.6.18.tar.bz2 这个版本,然后解压到/usr/src/目录下。解压命令是tar -xvf linux-2.6.18.tar.bz2就可以了。
step2:  准备工作做好之后首先是编译内核,如果你下载的内核版本和你的主机版本是一一对应的,那么编译起来很简单的,一般没有什么问题的,主要就是几个make命令:
make oldconfig
make prepare
make scripts
step 3: 下面就是在hellokernel.c的目录下编写Makefile文件,注意Makefile的第一字母必须大写,我就是在这里犯错,查了半天没查出问题。Makefile的编写对于这个例子很简单,但是如果复杂的内核模块的开发还是要好好学习怎么编写的。
其实就是简单的几句话就ok了:
obj-m := hellokernel.o //目标模块的编译来自于hellokernel.o的文件, hellokerne


相关文档:

Linux GCC make文件的写法1

所需文件hello.c, main.c, hello.h, Makefile,在同一个目录下
hello.c:
#include <stdio.h>
void hello(char name[])
{
printf("Hello %s!\n", name);
}

main.c:
#include "stdio.h"
#include "hello.h"
// The second
int main()
{
hello("GCC");
printf("Haha Linux Ubuntu!\n");
......

linux驱动之makefile详解

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
    ......

LINUX FREEBSD 文件系统结构


Linux
/ Linux文件系统的入口,也是处于最高一级的目录;
/bin 基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。做为基础系统所需要的最基础的命令就是放在这里。
/boot Linux的内核及引导系 ......

Linux的大阅兵






<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
        所谓“阅兵”就是检阅部队的意思。
Linux
大军(发行版)可谓“散兵游勇”,谈何大阅兵?此言差矣。
 
   ......

Linux 内核WorkQueue阅读笔记


1.            Workqueue
Workqueue的名字就和他的功能一样:需要处理的工作列表和工作的添加删除(貌似没有看到如何删除的)、以及工作的调度执行。
需要处理的工作列表通常都维护在内核对象workqueue_struct里面。系统里面可以有多个workqueue_struct。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号