linux sysfs(3)

linux sysfs(3)
我一直有一个看法,就是有些程序是变态写出来的。我认为最有可能变态三个语言就是1)C语言2)make语言3)shell脚本
随便举几个例子
1)C语言
void mystrcat(char *d , char *s )
{
 while(*d) d++;
 while(*s) *(d++) = *(s++);
 *d = '\0';
}
int mystrcmp(char *s , char *t )
{
 while( *s && *t && *s == *t ) s++,t++;
 return *s - *t;
}
2)make语言
  .PHONY: shar
     shar: $(SRCS) $(AUX)
             shar $(SRCS) $(AUX) | compress \
               > tar-`sed -e '/version_string/!d' \
                          -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
                          -e q
                          version.c`.shar.Z
     
     .PHONY: dist
     dist: $(SRCS) $(AUX)
             echo tar-`sed \
                  -e '/version_string/!d' \
                  -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
                  -e q
                  version.c` > .fname
             -rm -rf `cat .fname`
             mkdir `cat .fname`
             ln $(SRCS) $(AUX) `cat .fname`
             tar chZf `cat .fname`.tar.Z `cat .fname`
             -rm -rf `cat .fname` .fname
3)shell脚本
    
#!/usr/bin/ksh

exit_msg() {
  [[ $# -gt 1 ]] && echo "${0##*/} (${1}) - ${2}"
  exit ${1:-0}
}

[[ $# -lt 2 ]] && exit_msg 0 "Usage: ${0##*/} <file name #1> <file name #2>

for _FNAME in $@
do
  [[ ! -f "${_FNAME}" ]] && exit_msg 1 "Unable to find file '${_FNAME}'"
  [[ ! -r "${_FNAME}" ]] && exit_msg 2 "Unable to read file '${_FNAME}'"

  gzip ${_FNAME}
  ls -l ${_FNAME}.gz
done

怎么样,像不像火星语?我一直觉得就是。我认为现在这个时代喜欢这样写的人,不是变态,就是暴露狂-炫耀。
如果打比喻来讲的话,我认为,这种写法类似于文言文,而java等更高级的原因写法,才是现在正常人的文档。文言文当时这样写,也是被迫无奈,当时的字是写在竹子上,你相信如果把金庸的“飞雪连天射白鹿,笑书神侠倚碧鸳”都刻在一张张竹片上,我估计整个首都图书馆也就是填满了。难怪孔子长佩刀,原来古代读书也是一门体力活。
现在不同了,现在一个硬盘,几乎可以装下所有的古代文章,我们这个时候就没有必要之乎者也了,除非你是为了得瑟。别跟我说什么美感,我觉得红楼使用近现代语言也是挺美的,朱自清的荷塘月色也能够表达出意境。
所以,写程序也是一样,30年前,cpu才十几兆,内存才几K,硬盘也就那么一点点,所以,我们写程序必须精炼,越简单而且能靠近机器语言也好。现在这个社会,完全没有必要了,随便一个硬盘几百个T,随便一个CPU,好几个内核,主频还是2G多。所以这个时候,我们应该更用接近人类语言和思维方式的语言来写程序,不要和我说什么效率,效率可以从编译器和硬件架构来优化。
所以,还这样写的人,只有两种可能,第一种是疯子,第二种得瑟,炫耀自己水平。
我有一个梦想,有一天,把金庸小说输入电脑,然后电脑就帮你运行了,然后自动出来一部电影,这样我们就不必忍受令狐冲和东方不败的断背之痛苦了。

理想很丰满,现实很骨感,现在你和我还得忍受这种天书的痛苦,言归正传,下面我们正式讨论sysfs中的kset和kobject,不过,我不想使用火星语来描述,我更想使用我们地球人的语言来描述。

好了,一个全球跨国公司SYSFS的全球运动会斯皮罗(cipmylo)开幕了,现在是开幕式。
首先,所用员工入场,不要意思,与民同乐,所有员工必须参加,所以,运动员也是员工。首先公交车对入场了,美丽的礼仪小姐,举着大牌子,上面写着bus,胸口贴着一个小牌字,还写着很多小字。后面跟着一排礼仪小姐,手里也有牌子。
现在koject的概念出来了,什么是koject,我告诉你,kobect就是人,不管你是礼仪小姐也好,是运动员也好,还是管理人员也好,人+胸口的小牌子就是kobject。那么什么是kset,不要意思,礼仪小姐就是kset,虽然他不是公司的人,不是员工,但是,她就是kset,他牌子上有个指针,指向第一个bus的礼仪小姐,第一个礼仪小姐胸针上写着第二个礼仪小姐,最后一个礼仪小姐又写着礼仪小姐bus0。为什么要这样,因为他们中间要做方队编号,最后一个必须知道头在那里。
Kset:BUS(礼仪小姐0)<-----------------------------------------------------------------------------------------------------------
      |                                                                                                                           |
      |                                                                                                                           |
      K_bus:hid(礼仪小姐1)--->K_bus:I2c(礼仪小姐2)--->K_bus:pci(礼仪小姐3)--->K_bus:usb(礼仪小姐4)--->...K_bus:mmc(礼仪小姐n)
哈哈,阵容出来了。这就是第一排和第二排的情况,其实还有第三排呢。第三排也是人,不过一一批特殊的人,什么特殊的人,就是家属,注意,是家属,不是配偶,也就是说,可能是爷爷奶奶来,也可能是老婆孩子,也可能是表哥表妹,不过最好不要让表哥表妹来,容易引起家庭矛盾。
公司忒抠门,规定了不管你家族有多少人在公司,但是能来参加运动员的家属只给一名。所以,虽然你兄弟俩在不同部门上班,不要意思,你们老爸老妈只能来一个。
这些家属也都有一个牌子,上面写着driver,driver旁边,还放了一个假的机器人,就是在公司的员工的假人。真人在哪里?答曰,真人在devices那个方队呢。
这个有一个问题,就是研发总监的家属应该站在谁的后头,当然是总经理的那个方队里面了。这个要注意,所以,usb的控制器,要放在pci的方阵里面。对了,家属就是k_driver.所以,先成家,再立业,家属永远在背后默默支持你。
当然了,这些家属和负责他们部门的对应礼仪小姐,也是形成一个双向链表的。

ok。bus方队过完了,下面是真正的员工出场了。员工出场也有一个礼仪小姐,牌子上写着devices,当然这个礼仪小姐也是kset。
后面全部都是公司员工了,第二排是总经理,研发老大,采购老大,销售老大,当然,这要看公司的具体组织架构。例如下面的架构:

breakpoint  isa          pci0000:00  pnp0  rapidio   system      virtual
cpu         LNXSYSTM:00  platform    pnp1  software  tracepoint

platform:总经理办公室主任
pci:外协办公室
cpu:总经理
...
这样编排或许有些奇怪:
好了,下面到了第三排了,第三排基本还是各个部门的老大,我们来看看platform:
alarmtimer  Fixed MDIO bus.0  i8042   power      serial8250
eisa.0      floppy.0          pcspkr  reg-dummy  uevent
还是各个部门的老大,你可以认为是人力资源部老大,还有行政后勤部老大,还有财务部老大。
到了第四排。我们来看看pci的第四排吧。例如
/sys/devices/pci0000:00/0000:00:07.1$ ls
ata1                      driver         modalias   resource2
ata2                      enable         msi_bus    resource3
broken_parity_status      firmware_node  power      resource4
class                     host0          remove     subsystem
config                    host1          rescan     subsystem_device
consistent_dma_mask_bits  irq            resource   subsystem_vendor
device                    local_cpulist  resource0  uevent
dma_mask_bits             local_cpus     resource1  vendor
---------------------------------------------------------------
你可以认为这里是一个研发中的,其中ata1就是软件一部,ata2就是软件二部,host0,硬件一部,host1,硬件二部。其他呢?其他公司架构的东西,以后再表。
好了,我们就这样走完员工方队了。折腾折腾,开模式结束了。
下面就到class,class是什么,class就是运动场馆站着的礼仪小姐,上面写着运动员,其实是class,英文中文不是一一对应,这里注意理解哦。
他的后面站着另外一排礼仪小姐,这些礼仪小姐和刚刚走方队的一样,也是链表和第一排连接在一起,其都是class类型,但是名字分别是
/sys/class$ ls
ata_device  devfreq   hwmon        net           rtc           spi_transport
ata_link    dma       i2c-adapter  pci_bus       scsi_device   thermal
ata_port    dmi       input        power_supply  scsi_disk     tty
backlight   drm       leds         ppdev         scsi_generic  usbmon
bdi         firmware  mdio_bus     ppp           scsi_host     vc
block       gpio      mem          printer       sound         vtconsole
bluetooth   graphics  misc         regulator     spi_host
bsg         hidraw    mmc_host     rfkill        spi_master
上面我们可以理解为调高,跳远,游泳,跳水,足球,篮球,反正足够你比喻的。
到了第三排了,第三排就是实际的员工运动员了。前面我们说了,虽然运动会大家必须参与,但是参与的意思是你到场参加任何活动都可以,不一定是比赛,所以,这里只有部门员工在第三排。他们站在哪一个队伍里面就表示他们将参加哪一个类型的比赛。
------------华丽的分割线-----------------------
到此,人物都搞定了,等着比赛吧,不知道金牌怎么样,不过黄金好像跌价了。
明天我们结合这个必须我们认真看看火星文的数据结构。




posted @ 2013-04-20 13:08  xinyuyuanm  阅读(241)  评论(0编辑  收藏  举报