2008年3月28日星期五

linux device drivers study

最近几天都在看这本书《linux 设备驱动程序》,虽然我很早就“浏览”过这本书,但是那是真正的浏览,以至于看了跟没看是一个样,我看很多书都是这样,以至于我都可以认为图书馆7楼(电子,计算机类)的书我都有“浏览”过……

但是这一次不一样,我居然看懂了这本书都在讲什么,这个学习过程就是这么的折磨人。我想这些知识从整体来讲仿佛是一个平面,所以知识没有积累到一定的量,还就是看不懂,我大学期间目前为止所学到的每一个知识都是这么艰难的过程,尤其是大一的时候学习php。没人教,太困难了。

《linux 设备驱动程序》这本书我现在看到190页,到目前为止作者是以一个scull的驱动程序为主线,教我们怎么编写驱动,不过看到现在我今天才做第一个实验:编写hello,world的驱动程序(其实就是抄书啦):

[code:c]
#include "linux/init.h"
#include "linux/module.h"

MODULE_LICENSE("GPL");

static int __init eth_init(void)
{
printk(KERN_ALERT"hello, world\n");
return 0;
}
static void __exit eth_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}
module_init(eth_init);
module_exit(eth_exit);
[/code]

另存为hello.c ,然后是要编写Makefile,看书上讲的,弄半天结果还是没出来,Google几下,然后知道几个要点是,内核源码树要先make menuconfig 然后 make 编译一会儿,其实我老早就有编译过,只不过是clean掉了,没想到编译驱动也需要这个。具体的Makefile如下:

[code]
PWD = $(shell pwd)
#please change next variable
# to the path of kernel source of yourself
KERNEL_SRC =/home/jia/kernel/linux-source-2.6.22/
obj-m := hello.o
module-objs := hello.o

all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules

clean:
rm *.ko
rm *.o
[/code]

编译成功之后会生成hello.ko文件,用超级用户权限加载到内核:sudo insmod ./hello.ko ,卸载用命令 sudo rumod hello ,如果要查看printk 的输出,可以使用 dmesg 命令,可以看到刚才的输出。

:P 我对这个东西非常的感兴趣,我会继续深入学习的,hoho

2008年3月21日星期五

ipluss language engine V1.0

# ipluss_language_engine
# Copyright © ipluss 2008 All Rights Reserved

library download : ipluss_language_engine.rar

1.what is ipluss_language_engine ?
这是我写的一个语言引擎,当你要写的程序需要可以显示多国语言的话,使用这个引擎,你可以非常非常简单的完成这个语言显示部分,省去你的code时间。

2.why use this engine ?
高效率,小的代码量,及其简单的API接口,这都是我建议你使用这个语言引擎的原因。

3.how to make a foreign language support ?
只序言编写你想支持的语言的配置文件(相当的简单,只要你懂那门外语),然后放在你想要放的地方。在配置文件中,以 # 开头的是注释行,然后一行代表一条句子,逗号之前的是你对这一行的说明,我建议把它写成第几行(有效行,除去注释、空白行)就非常好,从0开始。注意文件的最后要有一个空白行就像你写程序一样。

3.how to program use it ?
你只需要下载本文附上的库文件。然后在你需要使用本引擎的程序中加入
#include "ipluss_language_engine.h"

在你需要显示语言之前,对引擎进行初始化,把函数的调用结果赋给 char ** lang 用完之后对它进行关闭。
这里是一个范例:
[code:c]
char ** lang ;
int line = 0 ;
//这里我用 argv[1] 代表我存放的语言文件
//这样我可以在程序启动的第一个参数提供语言文件的名称
//比如说 main.exe english.ini
lang = load_lang ( argv[1] );
printf("\n\n%s\n\n", lang[0]);
while ( lang[line] != NULL )
{
printf (lang[line]) ; // lang[line] 就代表你语言文件中的第line行(
有效行,除去注释、空白行)的文字
printf ("\n") ;
line++ ;
}
free_lang ( lang );
[/code]
我还提供一个可以打印所以语言条目的函数 new_print_file ( lang );然后在编译的时候加上链接ipluss_language_engine.a 的选项,我用gcc是这样的:
gcc main.c ipluss_language_engine.a -o main.exe

如果你使用IDE,请在链接选项里面加上这个库。

4.It is realy free library !

ps:一个完整的程序示例
[code:c]
#include "stdio.h"
#include "stdlib.h"
#include "ipluss_language_engine.h"
int main(int argc, char** argv) {
char ** lang ;
lang = load_lang ( argv[1] );
printf("\n\n%s\n\n", lang[0]);
free_lang ( lang );
return (0);
}
[/code]