I want to be a complete engineer - technical genius and sensitive humanist all in one!

Saturday, September 27, 2008

利用udev、sys动态创建linux设备结点

在Linux2.6内核中,devfs被认为是过时的方法,并最终被抛弃,udev取代了它。Devfs的一个很重要的特点就是可以动态创建设备结点。那我们现在如何通过udev和sys文件系统动态创建设备结点呢?

下面通过一个实例,说明udev、sys动态创建设备结点的方法。注意代码中红色的部分是为了实现动态创建设备结点添加的。


#include /linux/module.h/

#include /linux/kernel.h/

#include /linux/init.h/
#include /
linux/fs.h/
#include /
linux/cdev.h/
#include /
asm/uaccess.h/
#include /
linux/device.h/


MODULE_LICENSE ("GPL");

int hello_major = 252;
int hello_minor = 0;
int number_of_devices = 1;
char data[50]="foobar not equal to barfoo";
struct cdev cdev;
dev_t dev = 0;
static int hello_open (struct inode *inode, struct file *file)
{
printk (KERN_INFO "Hey! device opened\n");
return 0;
}
static int hello_release (struct inode *inode, struct file *file)
{
printk (KERN_INFO "Hmmm... device closed\n");
return 0;
}
ssize_t hello_read (struct file *filp, char *buff, size_t count, loff_t *offp)
{
ssize_t result = 0;
if (copy_to_user (buff, data, sizeof(data)-1))
result = -EFAULT;
else
printk (KERN_INFO "wrote %d bytes\n", count);

return result;
}
ssize_t hello_write (struct file *filp, const char *buf, size_t count, loff_t *f_pos)
{
ssize_t ret = 0;
printk (KERN_INFO "Writing %d bytes\n", count);
if (count>127)

return -ENOMEM;
if (count<0)>

return -EINVAL;

if (copy_from_user (data, buf, count))

{

ret = -EFAULT;

}

else

{

data[127]='\0';

printk (KERN_INFO"Received: %s\n", data);

ret = count;

}

return ret;

}

struct file_operations hello_fops = {

.owner = THIS_MODULE,

.open = hello_open,

.release = hello_release,

.read = hello_read,

.write = hello_write

}; struct class *my_class;

static void char_reg_setup_cdev (void)
{
int error, devno = MKDEV (hello_major, hello_minor);
cdev_init (&cdev, &hello_fops);
cdev.owner = THIS_MODULE;
cdev.ops = &hello_fops;
error = cdev_add (&cdev, devno , 1);
if (error)
printk (KERN_NOTICE "Error %d adding char_reg_setup_cdev", error);
/* creating your own class */
my_class =class_create(THIS_MODULE, "farsight_class");
if(IS_ERR(my_class))

{
printk("Err: failed in creating class.\n");
return ;
}
/* register your own device in sysfs, and this will cause udevd to create corresponding device node */
class_device_create(my_class,NULL, devno, NULL,"farsight_dev");
// device_create(my_class,NULL, devno,"farsight_dev");
}

static int __init hello_2_init (void)
{
int result;
dev = MKDEV (hello_major, hello_minor);
result = register_chrdev_region (dev, number_of_devices, "test");
if (result<0)>

{

printk (KERN_WARNING "hello: can't get major number %d\n", hello_major);

return result;

}

char_reg_setup_cdev ();

printk (KERN_INFO "char device registered\n");

return 0;

}

static void __exit hello_2_exit (void)

{

dev_t devno = MKDEV (hello_major, hello_minor);

cdev_del (&cdev);

unregister_chrdev_region (devno,number_of_devices);

class_device_destroy(my_class, devno);

class_destroy(my_class);

}

module_init (hello_2_init); module_exit (hello_2_exit);

在编译了驱动后,可以查看/dev/farsight_dev设备结点,和 /sys/class/farsight_class/farsight_dev/ 本代码的测试环境是Ubantu7.04,内核版本是2.6.20-15-generi。在不同版本的内核中,有些系统函数的参数可能不太一样。

Thursday, September 25, 2008

故地、故事

难得的假期,我回到曾经呆过的地方!
云淡风轻的日子,顺其自然的岁月,我们那些曾一起的故事,似水流年,流年似水,随青春都以渐渐淡去,唯独我还站在波涛汹涌的人流,昂着头,回忆属于我们的记忆.
当风轻轻掠过耳畔,云淡淡地挂在天边,眼前的一切仿佛离得那么高那么远。树依然葱绿,花依旧鲜艳,稻田里的谷穗却随时准备和阳光灿烂成一片…
季节在悄悄地改变,它将时间分割成一段一段,我们踩着四季在岁月里慢慢改变:年龄在增长,容颜在暗淡;经验在增加,精力却在褪减。

快刀杨佳大侠列传

杨大侠佳今已驾鹤西区,后偶尔在网上看到如此文,遂转之!以祭杨大侠在天之灵!

大侠杨君者,讳佳,国朝京畿人氏。起于贫寒,性情温良,邻人皆曰善。其尤善刀术,抽刀断敌首而不染滴血,人称“柳叶快刀杨佳”。

幼,父母离异,孤苦伶仃,苦不堪言。

初,闯荡浦江繁都上海府,欲侍平身气力而谋生。然国朝之“编户保甲之制”极苛,公四处讨活不得安生,更有酷卒——联防队、城管日夜侵扰,乃至于拳脚相加者,杨公避之唯恐不及。

堂堂八尺男儿,欲为贩夫走卒而不能。食不果腹、衣不遮体,英雄末路,前景凄凉,纵铁骨之人皆为之涕泪涔涔。

一日,公赁人力车行,卒为锦衣卫番役所获,番役谓车为盗赃,捕公入上海锦衣卫镇抚使司衙,百般栲掠,遍及惨毒,伤及命根,而公犹不屈,不肯自污为盗。后出赁者为证,车非盗也,锦衣卫方纵公归。公以国有明宪,冤人为盗须偿付之,诉于上海锦衣卫镇抚使司,竟不理。

一日,杨公偶获《贺元帅洪湖起兵纪实》一书,阅罢不禁掩卷长叹曰:“嗟夫!大丈夫生当若贺帅,两把菜刀斩尽天下不平事,固因杀豪强而死,熟与忍辱偷生,亦死得其所。余奋起市井,若能一怒而天下惊,不亦快哉!”。

遂奔东市买快刀,西市买汽油。事毕,东北向三拜以敬爹娘,思及哺育之恩,英雄泪潸然而下,天地亦为之动容焉!

翌日,杨公走上海锦衣卫镇抚使司衙,猝入门,一门卒喝曰:“咄!民工何为?众大人忙于政事,无暇顾汝,汝速去,不然断汝筋骨”!杨公冷笑一声,一道寒光划过,门卒闷声倒地,即刻血溅三尺。一刀而封喉之功,盖举世独杨公无有也!

践门卒之污血,杨公拖刀直入司衙议事大堂,怒发上冲冠,目眥尽裂。一路披靡如入无人之境,扑腾砍杀宛若饿虎屠羊。遇着锦衣飞鱼服之男子,公皆斩而杀之,腥血横飞,鬼神为之色变,一众锦衣卫士,竟无人可当公一合,虽携火铳,然公出刀,如飙发而电举,火铳竟无余暇可施为者也。昔者不可一世于十里洋场之豪强,顿作兽奔鸟散状悲鸣呼号,情形甚是惨烈!唯独妇人幸免,盖因杨公怜恤妇孺,不忍伤之,其仁侠之心,可以见矣!

此一役,力歼锦衣番役,力士等共六人,重伤者无算。杨公威名,海内为之信服!

杨公卒因力尽受缚,然其仍不失英雄本色,狼顾左右而瞋目叱之,众皆肝胆崩裂悚然不敢近焉。镇抚使司遂诬其为盗车小贼,强使英雄蒙羞。朝野为之哗然,中原豪杰无不为之悲愤痛惜!

壮士成名身将死,长使英雄泪满袖。

武松血溅鸳鸯楼,杨公一怒鬼神愁。

太史公曰:天下有道,圣人成焉;天下无道,圣人生焉;方今之事,仅免刑焉。

夫以杨公之力,若为民国诸侯争霸初年,必若贺帅封侯拜将,何愁青史无名。方今霉世,英雄仅免刑焉,豪杰寂寞不闻诸侯,乃至于引颈待戮、悲愤赴死者!不亦悲哉?不亦哀哉?

Wednesday, September 24, 2008

Linux驱动程序开发学习步骤

1. 学会写简单的makefile

2. 编一应用程序,可以用makefile跑起来

3. 学会写驱动的makefile

4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。

5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。

6. 写一block驱动, 加上read,write,ioctl,poll等各种函数实现。

7. 简单学习下内存管理, 这个是最难的,明白各种memory alloc的函数实现细节。这是linux开发的基本功。

8. 学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。

9. 看内核中实际应用的驱动代码。 你会发现最基本的你已经知道了, 大的框架都是一样的, 无非是read, write, ioctl等函数的实现, 但里面包含了很多很多细小的实现细节是之前不知道的。 这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。

推荐您看2.6.20中integrated的一个驱动 kvm,记得是在driver/lguest下,很好玩的, 就是linux下的虚拟机驱动,代码不长,但功能强大。有能力的可以自己写一操作系统按照要求做成磁盘镜像加载到虚拟机中, 然后客户机可以有自己的4G虚拟地址空间。

10. 看完驱动欢迎您进入Linux kernel学习中来。

最简单的方法,跟着ldd(linux devive driver)做一遍。

Wednesday, September 17, 2008

关于民族产业还有属于民族的我们

这几天,“民族产业”这几个字恶心的我要吐,三鹿的鹿托们到处叫嚣着“死扛民族产业”云云,还死硬把爱国和支持“国人杀手”联系起来,说“不挺三鹿就是不爱国”云云!去你妈的吧,民族产业专门毒杀民族未来?
我自始自终都很爱国,我高中就给国务院写信,畅谈自己对收复台湾的想法和意志,表达自己富国强兵的愿望!也得到他们热情的回信和邮寄给我的书籍资料。我是爱国的,我自始自终都热爱着我的国家!
国家爱我吗?
垃圾联想,那产品......,都那样了,还摇着一副讨好洋人的丑恶嘴脸却压榨着国人并不多的财富!
三鹿,提供给洋人的东西都没有问题,自己用的全部有毒,民族企业嘛,毒的就是你中国人!
汶川地震倒塌的学校,死的就是你中国的学生!
新闻媒体的歌功颂德,国家权威机构的信誓旦旦,民族企业的万丈豪言---原来都是骗人的!
骗谁?人民!人民最傻,人家说什么就是什么!到最后连自己的命都丢了!
如果说以前对民族产业是哀其不幸,怒其不争,那么,这次,我彻底死心了!
去他妈的民族产业,去他妈的国货!
谁爱用谁用去!
这些事件的背后有多少黑幕我们不知道,有多少利益集团千丝万缕的关系我们也不知道!
这个时代是个竞争的时代,所有人都在最大限度的捞钱,不惜一切代价的捞钱!越多越好,越快越好!极好,不惜一切代价的捞钱!
所有人都毒死了那也无所谓,只要我不死就好!
别人的孩子都被砸死了无所谓,我的孩子没有事!
每次国内重大事件倒霉的都是草根阶层!
我想那些沦为国内和国际各种利益代言人的中国精英们是论不到他们的孩子死的!
我想那些有毒的奶粉他们是不会吃的!
改革开发砸碎了我们固有的价值观念,物质因素被推举到无比崇高的位置!
我们就有的价值观荡然无存,信的价值观尚处于混乱状态!
中国是一个没有宗教信仰的国家,时值今天我们的脑袋里面出了充斥着物质以外我想没有其他的东西了,尽管我个人也是排斥宗教的,但宗教积极的一面亦不能视而不见.在一个无神论、唯物主义盛行的社会我是在找不到让卑劣的心灵可以去放松的地方。
于是大家相互伤害相互折磨,还自以为得了好处。
那么社会的总管---政府呢?
政府或者在睡觉---真睡!所以没有发觉。
或者在假寐---发觉了就当作没有发觉。
或者与坏人沆瀣一气,狼狈为奸,有财大家发!
或者发现了,发现了又怎样?
八十七年前,本着为穷人争权益,我们的党成立,毛主席正是本着为穷人打天下的理念,经过艰苦卓绝的奋斗创建了新中国!
今天,......哎!我们的政府已经沦落为既得利益集团和有钱人的看门X和帮凶!
我不再信任他们了,别想着他们会真的帮你!
我生平第一次有了恶心的感觉,对这个国家,这个政府!对这个一直蒙骗、欺诈我们的恶心......
洋人是灭不了中国的,灭中国者,中国人也!
这是个神奇的国度!

三鹿-灭亡之前的疯狂

三鹿充满戏剧性的高潮后面还有多少见不得人的东西?天知道。
因为如我所料,某某部显然已经开始下封令了——如此震惊世界的大事件在网站上的位置都比不上残奥女乒夺金和钱塘大潮,连个专题都没有!
我曾非常侥幸地希望如政府希望让我们明白的那样,三鹿事件只是个别非法奶农利欲熏心所为。非常不幸的是,我错了。
让我们算一下吧:两个被抓的黑心奶农共提供了3吨毒奶液,那么700吨毒奶粉(10-13吨奶液可制1吨奶粉)需要有多少黑心奶农?全国22家企业又该抓多少奶农呢?
上帝说,要让一个人灭亡,必先使其疯狂。三鹿在不经意间,揭开了一个行业的疯狂——
仅仅是一种婴儿奶的抽查,便有20多个品牌含毒,那么,没被抽到的成人奶粉呢?液体奶呢?其它奶制品呢?
“供应奥运、残奥奶粉未出现问题”?看似为了平息国际舆论,让洋人释怀,但却令国人深深地悲哀——
这说明,一,在我们的长官看来,国人的生命和健康是不如洋人重要的;二,掺毒行为是完全可以操纵、控制的,是有选择的主观故意!
所以,把掺毒归结于个别奶农的所为完全是扯JB蛋的事,这是一个行业的疯狂,是中国奶业的潜规则!
日本人说,每天一杯奶,拯救了一个民族;中国人说,每天一杯奶,毁灭了一个民族。
一个连自己子孙都不放过的民族是可耻的民族,是一个没有任何希望的民族!
在我看来,这场三鹿引发的奶业危机,其对国人造成的影响远远大于当年的非典。因为非典毕竟有不可抗逆性,是偶发和局部的。
但中国喝奶的人有多少?东南西北、老弱病残、城镇乡村,总该有十亿吧?!
我的悲哀和绝望在于,如此影响民生的惊天事件,在传媒中却为刻意地淡化了!我甚至在想,八月初即被发现了的毒奶粉,如果不是新西兰政府的直接干预,或许永远都不会暴露在国人面前。
我们看到过太多太多类似的事件。下面的发展用屁股都能想得出——
追源溯流:抓几个“黑心”奶农,判了(正在进行中);
现身说法:奶农现场演示,并表示认罪、忏悔;
严查三鹿:老总一干人辞职(正在进行中),最多抓上一两个;
举一反三:市长省长部长局长做深刻检讨,最多撤上一两个;
亡羊补牢:行业措施、整改方案纷纷出笼;
专家解惑:不知其名的专家称三聚氰胺并不可怕,不会有后遗症
党恩国爱:政府关怀受害儿童,白衣天使救死扶伤;
情绪稳定:受害家长纷纷谢谢党和政府;
多难兴业,中国奶业走出低谷重现辉煌;
……
三鹿事件可能出现的结局,按照那些老套手法,也许是这样的:抓几个“不法奶农”、“不法奶霸”,三鹿的一些采购人员及质检人员被抓。田文华董事长辞职及石家庄市的某位分管领导撤职,这可能都不容易看到。然后,宣传机器高速运转,从父母到专家,纷纷出现在媒体上赞美政府。
如果我们的政府不想倒台,就按上面的手法做吧。这次,若不彻查所有涉及人员,那么,连锁反应将这样发生:
1、中国乳制品业一同崩溃。三鹿这样的企业都下毒,人们有理由相信,其他企业也有嫌疑。三鹿为了自保,可能放风它的做法是行业“公开的秘密”,拉着整个行业一同陷入信任危机。
2、中国的食品业接着垮台。连自己的孩子都可以毒,那么,还有什么底线?毒毒宠物,毒毒青少年、成年人,不更是毫无顾忌吗?中国制造由于连连涉毒,在国际上已经恶名远扬,三鹿这次安然过关,就等于让三鹿为大家敲下最后一根棺材钉。
3、所有相关职能部门的破产。三鹿不仅牵扯到质检、卫生、工商、食品药品监督等等部门,还有强大的国家宣传机器背书----比如CCTV,三鹿从现在新闻来看,早在07年底就涉毒,从高强的讲话来看,三鹿三月就知道自己产品有毒,这反证了所有职能部门形同虚设,在这么长的时间里,它们没有作为,甚至几天前,还有甘肃的质检部门证明其合格,人们因此得出政府信用破产的结论,是必然的。三鹿背后的黑幕也是我们永远可能不知道的。
4、政府为了挽救自己,只有一个方法,让调查公开、深入,让新闻媒体与公众舆论持续监督,处理一切涉及到的官员。任何人管制言论,民众都将视之为不法三鹿的利益共同体。
5、中国人固然温良,但是一个政府一再为了不法企业的私利、为了政府所谓的面子而牺牲中国人的孩子----这次波及全国,北京上海等中心城市也受害----那么,这个政府的寿数也就到了。
6、一个国家,国民最重,国民认为他们的孩子更重。政府应该尽快知道这个常识,不然,建议所有当政者成为莫扎特的乐迷,多听听他的《安魂曲》,可能会用得上了。
可是可是,这分明是一场蓄谋已久的谋财害命啊,这分明是一个行业对一个民族的的投毒啊!
看看去年七月质监局长李长江在出口有毒宠物饲料在国际上引发轩然大波后说的那番无耻的话吧,如果发生在中国的这起毒奶事件仍不能让这些官老爷猛省的话,如果他们还试图不断用新的错误去掩盖旧的错误的话,如果他们还把中国民众当成愚民、贱民而试去打压、蒙骗的话,我相信,政府会彻底丧失掉仅有一点的民心了。
三鹿事件,不过是风暴潮的一角。
森拉克台风过后的大地,也许土地依旧,但下面的地基可能已经彻底被掏空,大厦随时都有倾覆的危险。
天作孽,犹可违;人作孽,不可活!

Tuesday, September 16, 2008

人生需要学会欣赏

欣赏是一道绝美的风景,一隅人人渴望、四季相宜、风味独特的景观。学会欣赏,你便懂得享受;学会欣赏,你便拥有快乐;学会欣赏,你便走近幸福;学会欣赏,便成为一个大写的人!

欣赏是一种享受,是一种实实在在的享受。无论何时何地,你学会了欣赏,你便收获快乐,收获温馨。懂得欣赏,你的心情便永远阳光灿烂。

欣赏是一种情怀,是一种博大高雅的情怀。没有爱心的人,不懂得欣赏;缺少情趣的人,不知道欣赏。欣赏需要知本。

欣赏是一种幸福,是一种少数人才能享受的幸福。大千世界,芸芸众生,自以为是者多,懂得欣赏别人的少;自私自利者多,专门利人者少。欣赏滋生幸福,幸福需要懂得欣赏。

欣赏是一种学习,是一种真心实意的学习。生活里,每个人都有每个人的优点,每个人都有每个人的弱点。学会欣赏,就要时刻看到别人的优点,让别人的优点自觉地成为自己的优点。久而久之,你便自然成为一个优秀的人;优秀的人,自然也懂得欣赏。

欣赏是一种态度,是一种发自内心羡慕的态度。当你读到一首诗或看到一幅画,一首清新流丽、情味隽永的小诗,一幅别有格调、神韵悠然的国画,你不能不激动,你不能不羡慕,除非你是傻瓜。此时,羡幕无需理由。

欣赏是一种风格,是一种独特自在的感悟风格。纷繁世界,无奇不有,有山有水,有花有草,有风有雨,时时刻刻,变幻无穷。懂得欣赏,便懂得感悟;感悟愈深,生活得愈滋润、愈轻松;轻松滋润的生活便是至高无上的生活,既然知道无上生活的秘诀,为何不学会欣赏?利人利己的欣赏,应当义不容辞、义无返顾!

欣赏是一种精神,是一种情高趣雅的精神。蚂蚁有蚂蚁的生活,大像有大像的情调,仙鹤有仙鹤的风姿。懂得欣赏,你便懂得生活的真谛;懂得欣赏,你便拥有别人所没有的情调;懂得欣赏,你也便拥有迷人的风姿。

欣赏是一种力量;是一种与时俱进、自强不息、自我奋斗的力量。人生在世,区区百年,匆匆一日,忽忽一生,若不见贤思齐,脚踏实地,真抓实干,争分夺秒,多做一些有利于人类文明发展的大事、好事,年老时,你就会后悔不迭、悔之晚矣。学会欣赏,你便懂得珍惜,你便拥有更多、奉献更多。

欣赏是阳光,是雨露,是冬天里的一把烈火;欣赏是玉液,是琼浆,是夏日里的一片浓阴。让我们学会欣赏,让我们温暖处处。让我们学会欣赏,让我们阴凉处处……

中秋去了海边


中秋去了海边,到处是沙子,和水!
旁边那个傻乎乎的丫头就是我传说中的美眉!

Labels

Followers