嵌入式linux内核详细设计(编辑修改稿)内容摘要:

ck *i_flock。 struct vm_area_struct *i_mmap。 struct page *i_pages。 struct dquot *i_dquot[MAXQUOTAS]。 struct inode *i_next, *i_prev。 struct inode *i_hash_next, *i_hash_prev。 struct inode *i_bound_to, *i_bound_by。 struct inode *i_mount。 unsigned short i_count。 unsigned short i_flags。 unsigned char i_lock。 unsigned char i_dirt。 unsigned char i_pipe。 unsigned char i_sock。 unsigned char i_seek。 unsigned char i_update。 unsigned short i_writecount。 union { struct pipe_inode_info pipe_i。 struct minix_inode_info minix_i。 struct ext_inode_info ext_i。 struct ext2_inode_info ext2_i。 struct hpfs_inode_info hpfs_i。 struct msdos_inode_info msdos_i。 struct umsdos_inode_info umsdos_i。 struct iso_inode_info isofs_i。 struct nfs_inode_info nfs_i。 struct xiafs_inode_info xiafs_i。 struct sysv_inode_info sysv_i。 struct affs_inode_info affs_i。 struct ufs_inode_info ufs_i。 struct socket socket_i。 void *generic_ip。 } u。 }。 fipc_perm ipc_perm 结构描述了一个 System V IPC 对象的存取权限。 . struct ipc_perm { key_t key。 ushort uid。 /* 所有者的用户编号和组编号 */ ushort gid。 ushort cuid。 /* 创建者的用户编号和组编号 */ ushort cgid。 ushort mode。 /* 访问方式 */ ushort seq。 /* 序列号 */ }。 irqaction 结构用来描述系统的中断句柄。 struct irqaction { void (*handler)(int, void *, struct pt_regs *)。 unsigned long flags。 unsigned long mask。 const char *name。 void *dev_id。 struct irqaction *next。 }。 linux_binfmt 每个 Linux 可以理解的二进制文件格式对应一个 linux_binfmt 数据结构。 struct linux_binfmt { struct linux_binfmt * next。 long *use_count。 int (*load_binary)(struct linux_binprm *, struct pt_regs * regs)。 int (*load_shlib)(int fd)。 int (*core_dump)(long signr, struct pt_regs * regs)。 }。 mem_map_t 数据结构 (或叫做页面 ) 用来存放每个物理内存页面的信息。 typedef struct page { /* these must be first (free area handling) */ struct page *next。 struct page *prev。 struct inode *inode。 unsigned long offset。 struct page *next_hash。 atomic_t count。 unsigned flags。 /* atomic flags, some possibly updated asynchronously */ unsigned dirty:16, age:8。 struct wait_queue *wait。 struct page *prev_hash。 struct buffer_head *buffers。 unsigned long swap_unlock_entry。 unsigned long map_nr。 /* pagemap_nr == page mem_map */ } mem_map_t。 mm_struct 用来描述一个任务活一个进程的虚拟内存空间。 struct mm_struct { int count。 pgd_t * pgd。 unsigned long context。 unsigned long start_code, end_code, start_data, end_data。 unsigned long start_brk, brk, start_stack, start_mmap。 unsigned long arg_start, arg_end, env_start, env_end。 unsigned long rss, total_vm, locked_vm。 unsigned long def_flags。 struct vm_area_struct * mmap。 struct vm_area_struct * mmap_avl。 struct semaphore mmap_sem。 }。 pci_bus 系统中的每个 PCI 总线对应一个 pci_bus 结构。 struct pci_bus { struct pci_bus *parent。 /* 父总线 */ struct pci_bus *children。 /* 总线的 P2P 链 */ struct pci_bus *next。 /* 所有 PCI 总线链 */ struct pci_dev *self。 /* 被父总线看到的桥设备 */ struct pci_dev *devices。 /* 桥后的设备 */ void *sysdata。 /* 系统指定的外部挂钩 */ unsigned char number。 /* 总线编 号 */ unsigned char primary。 /* 主桥编号 */ unsigned char secondary。 /* 二级桥编号 */ unsigned char subordinate。 /* 下级总线的最大数目 */ }。 pci_dev 系统中的每个 PCI 设备,包括 PCIPCI 和 PCIISA 桥设备都分别对应于一个 pci_dev 结构。 /* * There is one pci_dev structure for each slotnumber/functionnumber * bination: */ struct pci_dev { struct pci_bus *bus。 /* 设备所基于的总线 */ struct pci_dev *sibling。 /* 总线上的下一个设备 */ struct pci_dev *next。 /* 所有设备的链 */ void *sysdata。 /* 系统指定的外部挂钩 */ unsigned int devfn。 /* 可编程设备。 函数索引 */ unsigned short vendor。 unsigned short device。 unsigned int class。 /* 3 bytes: (base,sub,progif) */ unsigned int master : 1。 /* set if device is master capable */ /* * 理论上 , 中断级别可以从配置空间中获取而 * 不影响其它 . 但是 , 旧的 PCI 芯片不支持 * 这些寄存器并且只返回零 . 例如 , * 芯片 Vision864P rev 0 可以使用 INTA, 但是返回 0 *. pci_init()用 PCI_INTERRUPT_LINE 的数据初始化这个字段 *. 并且 pcibios_fixup() 可以改变它。 *. 这个字段不能是 0,除非改设备 * 根本不能产生中断 . */ unsigned char irq。 /* 改设备产生的 irq */ }。 request 结构用来向系统中的块设备发出请求。 这些请求是关于读或写缓冲区中的数据块。 struct request { volatile int rq_status。 define RQ_INACTIVE (1) define RQ_ACTIVE 1 define RQ_SCSI_BUSY 0xffff define RQ_SCSI_DONE 0xfffe define RQ_SCSI_DISCONNECTING 0xffe0 kdev_t rq_dev。 int cmd。 /* READ or WRITE */ int errors。 unsigned long sector。 unsigned long nr_sectors。 unsigned long current_nr_sectors。 char * buffer。 struct semaphore * sem。 struct buffer_head * bh。 struct buffer_head * bhtail。 struct request * next。 }。 rtable 每个 rtable 结构含有对应一个 IP 主机的路由信息。 rtable 结构在 IP 路由缓冲中被使用。 struct rtable { struct rtable *rt_next。 __u32 rt_dst。 __u32 rt_src。 __u32 rt_gateway。 atomic_t rt_reft。 atomic_t rt_use。 unsigned long rt_window。 atomic_t rt_lastuse。 struct hh_cache *rt_hh。 struct device *rt_dev。 unsigned short rt_flags。 unsigned short rt_mtu。 unsigned short rt_irtt。 unsigned char rt_tos。 }。 semaphore 被用来保护临界数据和临界区代码。 struct semaphore { int count。 int waking。 int lock。 /* to make waking testing atomic */ struct wait_queue *wait。 }。 sk_buff sk_buff 结构被用来当数据在网络协议之间移动时描述网络数据 . struct sk_buff { struct sk_buff *next。 /* 表中的下一个缓冲区 */ struct sk_buff *prev。 /* 表中的前一个缓冲区 */ struct sk_buff_head *list。 /* 所在的表 */ int magic_debug_cookie。 struct sk_buff *link3。 /* IP 协议层的缓冲区链 */ struct sock *sk。 /* 所属的 Socket */ unsigned long when。 /* used to pute rtt39。 s */ struct timeval stamp。 /* 到达时间 */ struct device *dev。 /* 到达或离开的设备 */ union { struct tcphdr *th。 struct ethhdr *eth。 struct iphdr *iph。 struct udphdr *uh。 unsigned char *raw。 /* 用来在一个 unix domain socket 里传送文件句柄 */ void *filp。 } h。 union { /* As yet inplete physical layer views */ unsigned char *raw。 struct ethhdr *ether。 } mac。 struct iphdr *ip_hdr。 /* For IPPROTO_RAW */。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。