|
发表于 2004-8-3 11:09:48
|
显示全部楼层
在回答之前,我想问兄弟两件事。
首先,你明白我上次的回帖吗?如果明白,可以谈谈你的思考;如果不明白,可以就此提出疑问。像兄弟这样,每次都抛开上次的问题和我的回帖不顾,而屡问新问题,我很难知道兄弟是否理解,而且,我个人也觉得很不尊重回帖者的脑力劳动。不知道兄弟有看过我的短消息了吗?
最初由 sybaselu 发表
usr/src/linux-2.6.6/kernel/drivers/mdeida/video/saa7134目录下有如下组成部分:
xxx.c, xxx.h, kconfig, makefiel文件组成, 其中在makfile中如下:
saa7134-objs :=saa7134-cards.o saa7134-core.o saa7134-i2c.o
saa7134-oss.o saa7134-ts.o 等等
obj-$CONFIG_VIDEO_SAA7134+=saa7134.o saa6752hs.o
这里我不明白的是:变量config_video_saa7134在哪里定义的, 整个文件的意思是什么!(是不是最后在/lib/modules/kernel/2.6.6/drivers/media/video/saa7134/下面生成saa7134.ko和saa6752hs.ko两个驱动, 还是取决于在内核中的编译情况?), 而且我发现在/drivers/下面每个设备的目录下面都是有这样的部分组成的!即:xxx.c+xxx.h+kconfig+makefile. 我现在正着手研究linux下的驱动程序的编写!
生成xxx.ko或xxx.o驱动并不要求xxx.c源代码中一定有一个关键的数据结构的子程序具体的实现代码如
typedef struct file_operation{
int (*seek)(struct inode *, struct file *)
int (*open)(struct inode *, struct file *)
int (*close)(struct inode *, struct file *)
int (*ioctl)(struct inode *, struct file *)
int (*write)(struct inode *, struct file *)
int (*read)(struct inode *, struct file *)
int (*fnasyc)(struct inode *, struct file *)
这个关键的数据结构在那个头文件中?
向版主报告
最初由 sybaselu 发表
磁盘分区上的文件系统中的格局如下:
引导块--(内核和引导参数?)--超级块---inode---数据;
1 :这里的inode存放的时系统上所有文件的inode吗?就是说文件数据和inode 是分开存放的!
2: 如果是所有的文件都存放在这里, 他们存放间有没有想目录样有层次关系?
3:我不太明白inode中的struct semaphore i_sem;
struct rw_semaphore i_allc_sem;
的意思?
struct file_operation *i_fop在inode 中从当什么作用?以及 struct inode_operations *i_op
4:"这个宏把系统调用展开为含有int 0x80的汇编代码,int 0x80就是软中断(系统门),"这个斑竹能否进步解释呢?迫切想知道来龙去脉
先问这么多吧!
最初由 sybaselu 发表
1。用户态用open()打开后返回fd(文件描述符), fd是标识一个文件被打开的模式, 因为一个文件可以本不同的用户以不同的方式打开,fd用于找出在系统打开表和用户进程打开表中的标识,标明用户不同的操作方式对文件!
2。斑竹提到系统调用“asmlinkage datatype _sys_open(parameter table)”用/fs/open.c实现, 可是open.c是个编译单位c源码, 而asmlinkage datatype _sys_open()这是个函数,而且有带参数啊!这是咋回事?为什么系统调用的实现不放在一个目录下,这样不更清晰吗?
3。指令int ox80是中断服务程序的入口地址吗?由他转向中断子程序处理表,如果是, 要不要还乘四个字节呢?
最初由 sybaselu 发表
1:那为什么不用fopen(), fclose(), fwrite()
2: fd的作用是用open()打开后使想其他的系统调用作为参数使用,如:read(int fd....), write(int fd, ....),能在系统或进程打开表中找到打开的文件
3: user process: read(), open(), write()-------->
system call: sys_open(), sys_read(), sys_write------->
VFS: vop_open(), vop_read(), vop_write()------------->
ext2/UFS/ext3 file system:ext3_open(), ext3_read(), ext3_write()--------------------->
从最初的问题到最后,兄弟你自己看看,它们之间有关联吗?很明显,离题了,每个旧问题在没有解决的情况下,兄弟旁征博引,又提问新问题,我个人觉得这样的效率是不可取的。
第二,你提出的问题究竟哪些是问题,哪些是你的理解呢?我个人感觉你总是把问题和自己的理解混在一起,这样不但不利于我的解答,也可见你的思维有点混乱。而且,我发现,兄弟你之所以有很多问题,或许因为你还没有重视思考,思考问题之间的核心点及共通点。
最初由 sybaselu 发表
4:进程间如何切换, 线程间如何切换?
5:描述用户进程的tast_struct 在哪里?在linux中他整合了proc , user数据结构吗, 不再分常驻内存和磁盘.
6:什么叫做缓存区队列(framebuffer quenue)?
7:统一缓存器快存:UBC-----united buffer cache
在下说话向来直率,还望包涵。我的目的只有一个,就是想让兄弟们学好知识。
提问是一种技巧,好的提问有利于交流双方的互动。
就一事论一事,否则永远不能谈在点子上。 |
|