-
2008-10-19
Debugging Memory on Linux
本文转载自http://www.linuxjournal.com/article/4681
All programs use memory, even ones that do nothing. Memory misuse results in a good portion of fatal program errors, such as program termination and unexpected behavior.
Memory ... -
2008-10-15
Poison food『转载』
作为一个食品专业的本科生我对我们专业是彻底失望了
想当初 系主任展望 我们专业的美好前景的时候 曾说 "中国的食品行业还是有很大发展空间的" 现在终于知道什么是"发展空间"了 套用师兄的话"中国的很多东西还真不是做给人吃的。从"阜阳大头娃娃"到现在的"三鹿事件",从苏丹红到肝炎病毒矿泉水。我们的食品
安全课从来不缺素材。几乎每一天上课的时候老师都在爆料,有些是大家都知道的,
有些是... -
2008-10-08
c语言中static 变量【转】
-
2008-10-05
Life in Shanghai
上海蛰居数月,略有感想,略有收获, 忽觉时光飞梭,今日之思已不同往日。
TIPs for GOOGLE picasa:
在用picasa的外链时,google限制必须使用分辨率在800一下的照片,否则不能够正常显示。Google此举也是为了降低他服务器的访问压力。如:http://lh4.ggpht.com/wltongling/SOhuvdeqd-I/AAAAAAAAAFA/IaMMtSYmwd0/s800/IMG_0376.JPG
上述的S800即为分辨率大小,如果超过800,在外链时应将其改小。 -
2008-10-05
文字如锚
文字像锚一样,拴住记忆之船,以免船在暴风雨中沉没
好久都没写过文字了,淡去的心情始终没有回味过来。那记录的文字如同逝去的回忆,陈旧了好多,但愿能如老酒,陈而弥香。
-
2008-10-05
[zz]徐家骏:我在华为工作十年的感悟
徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心用火山岩建的深入 地下的一个大型建筑.防辐射,可防卫星的电子,雷达等手段的侦察.里有象卫星发射中心那种超大屏幕,机房里满是三米的大型服务器和大型计算机.连接整个为 全球的每一台终端,整个华为每天三十多万封邮件,海外和全球的同步研发,内部的信息管理,内部流程,华为的国内国际IP电话都是通过出去.
上周,我正式提交了离职报告,准备给自己的职业生涯一个很大的转折,这是我长时间的思考最后所做的决定.但真的提出离职后,回想在公司的十年,还是百感交集。。。。 -
2008-08-25
【转载】浅析linux2.6.24内核initrd传递给rootfs进行系统加载流程
浅析linux2.6.24内核initrd传递给rootfs进行系统加载流程
『转自』http://blog.chinaunix.net/u1/38994/showart_688271.html
1.解析有loader传递过来的initrd参数
start_kernel()->
setup_arch()->
parse_tags()->
使用下面这个函数进行解析:
static int __init parse_tag_initrd(const struct tag *tag)
{
printk(KERN_WARNING "ATAG_INITRD is deprecated; "
"please update your bootloader.\n");
phys_initrd_start = __virt_to_phys(tag->u.initrd.start);
phys_initrd_size = tag->u.initrd.size;
return 0;
}
__tagtable(ATAG_INITRD, parse_tag_initrd);
2.进一步初始化initrd_start变量
start_kernel()->
setup_arch()->
paging_init()->
bootmem_init()->
bootmem_init_node()->
在该函数中使用下面2个语句将物理地址转为虚拟地址
#ifdef CONFIG_BLK_DEV_INITRD
...
initrd_start = __phys_to_virt(phys_initrd_start);
initrd_end = initrd_start + phys_initrd_size;
...
#endif
3.建立rootfs文件系统,并mount到根目录
start_kernel()->
vfs_caches_init()->
mnt_init()->
init_rootfs()->位于fs/ramfs/inode.c中,调用register_filesystem(&rootfs_fs_type);注册rootfs
接下来
init_mount_tree()函数将调用mnt = do_kern_mount("rootfs", 0, "rootfs", NULL);将rootfs挂在到/根目录下
然后使用如下两个函数,将后边建立线程的根目录指向rootfs,
set_fs_pwd(current->fs, ns->root, ns->root->mnt_root);
set_fs_root(current->fs, ns->root, ns->root->mnt_root);
4.将initrd(的ramdisk加载到rootfs
start_kernel()->
rest_init()->
kernel_init()->内核线程
do_basic_setup()->
do_initcalls()->调用所有arch/arm/kernel/vmlinux.lds.S中定义的INITCALLS模块,比如:使用module_init内建到zImage中的所有驱动模块
#define pure_initcall(fn) __define_initcall("0",fn,0)
#define core_initcall(fn) __define_initcall("1",fn,1)
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn) __define_initcall("3",fn,3)
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
#define subsys_initcall(fn) __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn) __define_initcall("5",fn,5)
#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn) __define_initcall("6",fn,6)
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
#define late_initcall(fn) __define_initcall("7",fn,7)
#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
上面我们关心的是rootfs_initcall定义,
在init/initramfs.c中具体实现如下:
rootfs_initcall(populate_rootfs);
populate_rootfs()会调用下面这个函数将initrd的内容释放到rootfs文件系统下
unpack_to_rootfs((char *)initrd_start,initrd_end - initrd_start, 0);
这样initrd的ramdisk的内容全部释放到了rootfs文件系统中,所以ramdisk下的所有目录结构将全部被克隆到rootfs文件系统下,具体unpack_to_rootfs函数的实现流程,以后有时间再研究(gliethttp_20080514)。 -
2008-08-06
About samba
以下资料来自于网络
转自http://bbs.chinaunix.net/viewthread.php?tid=847367&extra=page%3D1
可写不可删除的实现:共享目录 To_manager 只有manager这个用户对此目录拥有完全权限。
其它用户对此目录只有:可向其内复制并新建文件的权限。但是不能删除文件不能copy出文件,不能读文件。
步骤:
1。更改smb.conf 如下
CODE:
[To_manager]
comment=To_manager
path=/To_manager
writable=yes
create mask =1600
directory mask= 1600
2。让Linux支持POSIX ACL (这个 POSIX ACL 的功能在 Linux kernel 2.6 上被正式支持,之后又被 back-port
到 2.4 kernel 上。大家常用的档案系统,如:ext3,xfs,jfs,和 ReiserFS,都能使用
ACL。当然,大家须要在编译 kernel 时启动 ACL。)
我们亦可以在 /etc/fstab 中加入选项:
/dev/sda1 /home ext3 acl 1 2
如果对POSIX ACL 不熟悉请看http://bbs.chinaunix.net/viewthread.php?tid=760730&highlight=lovegqin
3。写个小脚本
CODE:
#!/bin/bash
mkdir /To_manager
chmod 777 /To_manager
chown manager:manager/To_manager
chmod o+t /To_manager
setfacl -m d:u:manager:rwx /To_manager
最后运行脚本,重启smb即可. -
2008-07-24
内核编程中的EXPORT_SYMBOL - [技术]
EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。
Linux symbol export method:
[1] If we want export the symbol in a module, just use the EXPORT_SYMBOL(xxxx) in the C or H file.
And compile the module by adding the compile flag -DEXPORT_SYMTAB.
Then we can use the xxxx in the other module.
[2] If we want export some symbol in Kernel that is not in a module such as xxxx in the /arch/ppc/fec.c.
Firstly, define the xxxx in the fec.c;
Secondly, make a new file which contain the "extern" define the xxxx(for example, extern int xxxx);
Lastly, in the ppc_ksyms.c we includes the new file, and add the EXPORT_SYMBOL(xxxx).
Then we can use the xxxx.
使用时注意事项:
在使用EXPORT_SYMBOL 的.c文件中 需要 #include <linux/module.h> 文件。
// 先写函数
func_a ()
{
}
//再使用EXPORT_SYMBOL
EXPORT_SYMBOL(func_a);注:export出的函数必须为非static函数,且要在相应的.h文件中进行声明。在内核中新加入文件时,需要对相应目录下的Makefile进行更改,并且新加入的文件使用的config设置与调用函数文件的config设置同。 -
2008-06-26
Farewell, my six year's memory
还有几个小时就要和这个生活了6年的城市说再见了。在没上大学之前,没住过校,所以刚入学的时候尽管寝室条件不是很好,还是被这个新的集体生活所吸引。那个时候,似乎带着好奇的眼镜,对大学中的每件事情都感到新奇。
我的过去
刚入学的那会,辅导员就欺负我们年轻无知,把期末考试说的巨为恐怖--让我们以为考不过天都要塌了,所以一个个都做乖乖仔,考试前期拼命的复习。通宵复习的传统就是那个时候给培养起来的。昨天看了欧洲杯的半决赛,觉得再没有那份精力通宵的去干一件事,或许已经老了。
本科的日子如流水般淌过,忽然觉得世界变得好大,比以前那个我长大的世界要大了很多。新奇的同时又感到了很多的无奈,也明白了世事不能尽随人意,但求无愧我心的道理。可理明白了,但却没有真的做到无愧我心,很多的事没有去做,很多的遗憾没有去弥补。或许这人生就是一个不断丢弃的过程,一路走一路将自己的幻想给丢掉。每个小孩都是一个天使,但是他们丢掉了幻想之后,他们就只能成为一个凡人。
还记得金秋艺术节时郭靖的扮相,虽然演的是现代版的可总还是觉得没有找到感觉。一个人骑着车,然后在最后的关头,却不敢去牵那黄蓉的手。于是乎一语成谶,那段戏成了我6年感情生活的缩影,过于保守始终都没有学会放开自己。唯一的不同是我的生活中没有出现那黄蓉似的女主人公,能够不嫌弃我那榆木脑袋,在那微醺的午后上演一场郭黄二人相拥的感人结局。那次戏排完之后,出现了小小的意外,平生第一次感到人的愤怒是很有力量的。不过也因此获得神似基努李维斯的称赞。
本科过后,研究生阶段并没有想象中的轻松。成堆的项目一下子压了过来,每天都几乎是围着项目转。开始迷茫,也开始思考自己的人生目标应该是什么。突然发现生活有时候是个螺旋形的阶梯,走着走着貌似回到了原点,而又和以前经过的时候有些不同。高度提升了,但最终的终点是什么还是不得而知。只是一个人在拼命的向前冲着。GRE和toefl是以前我都没想过要挑战的,感觉很有成就感,但也有些不值。因为自己做这些事情的时候都是处在一种无意识的状态,还是不知道自己的目标是什么。那么未来又是什么呢?
其实这个命题对于我还说还是难以回答。未来是不确定性的总和,所有的可能。如果上帝是未来的话,那么我会相信的。薛定谔的猫肯定也会同意我的观点。有句话我一直以来很欣赏--在这个社会里,个人得成为自己的教士。不仅如此,由于虔敬的核心意义和持久性,个人还得做自己的诗人、自己的哲学家、自己的君王、自己的人格大教堂的首席建筑师。也许人的终极目标就是让自己成为一个最令自己满意的作品,或许这有些自恋的意味,但实不为过。
恩,该打理好包裹上路了,朝着未来之路。---May be I don't know the final place to go, but I have my belif.









