版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式 Linux 内核详细设计说明书拟制:校对:审核:湖南计算机股份有限公司嵌入式系统研究所2001.5目录1.引言.21.1参考资料 . .21.2术语和缩写词 . .22.设计概览 .52.1设计的驱动因素以及各自重要性的排序(例如,功能、性能、可靠性、硬件、内存考虑等等). .52.2不同设计方案的评价 . .52.3对所选设计方案总体结构图示及讨论. .52.4开发环境(如开发语言、硬件、外设等等).63.设计描述 .73.1全局数据结构 . .73.2进程调度子系统 . .253.2.1模块功能概览 . .253.2.2详细输入、输出及处理描述 . .253.3内存管理子系统 .
2、.313.3.1模块功能概览 . .313.3.2详细输入、输出及处理描述 . .313.4虚拟文件子系统 . .343.4.1模块功能概览 . .343.4.2详细输入、输出及处理描述 . .343.5进程间通信( IPC)子系统 . .513.5.1模块功能概览 . .513.5.2详细输入、输出及处理描述 . .513.6网络模块( NET)子系统 . .603.6.1模块功能概览 . .603.6.2详细输入、输出及处理描述 . .601. 引言1.1参考资料无1.2术语和缩写词Argument参数,函数和例程中可以带入参数进行处理。ARP地址转换协议。被用来将IP 地址转换成物理硬件
3、地址,如网卡地址。ARP是 TCP/IP 协议族中一个非常重要的协议。AsciiAscii 代表着 AmericanStandard Code for InformationInterchange.字母表中的每个字母代表一个8 位的编码。 Ascii 被用来存储” 可写“的字符。Bit值域为 0 或 1 的一个二进制数据位。Bottom Half Handler核心里在队列中的任务的句柄或指针。Byte字节, 8 位数据。C一种高级编程语言,Linux 基本上是用 C编写的。CPUCentral Processing Unit(中央处理单元 ) 。Data Structure数据结构。Devi
4、ce Driver设备驱动程序。用来控制一个特定设备类的软件。例如,NCR 810设备驱动程序控制 NCR 810 SCSI 设备。DMADirect Memory Access(直接内存存取 )ELFExecutable and Linkable Format(可执行与可连接格式).EIDE扩展 IDE.Executable image可执行映象。 一个含有指令和数据的文件。可以被调进虚拟内存而执行。Function函数IDEIntegrated Disk Electronics.Image参阅可执行映象。IPInternet Protocol(网际协议 ).IPCInterprocess
5、Communiction(进程间通讯 )Interface接口。接口是一个抽象的概念。实现中,通常指一些函数或例程接口。IRQInterrupt Request Queue(中断申请队列 ).ISAIndustry Standard Architecture.Thisis a standard,although nowrather dated, data bus interface for system components such asfloppy disk drivers.Kernel Module一个可以动态地被装载的核心部份,如文件系统和设备驱动序。Kilobyte1024 字节。M
6、egabyte一兆字节或 1024K 字节。Microprocessor微处理器。Module模块。一个含有指令的文件。Object file目标文件。或 *.o 文件。指一个含有指令和数据的文件。但这个文件尚未与其所需要的其他目标文件或库相连接以形成一个可执行文件。Page物理内存被分成许多同样大小的页面。是虚拟内存管理调度的最小单位。Pointer指针Process进程。一个正在执行的程序。Processor处理器的简称。PCIPeripheral Component Interconnect.一个外设总线。Peripheral外围设备Program程序。Protocol协议。通常指两个实
7、体间“对话”的一种事先格式约定。Register寄存器Routine例程。与函数类似,除了不返回值。SCSISmall Computer Systems Interface(小型计算机接口 ).Shellcommand shell 。 Linux 缺省用的是 bash shell.SMPSymmetrical multiprocessing. Systems(对称多处理系统 ) 。Socket一个 socket 代表着一个网络连接。Linux支持 BSD Socket接口。Software软件System VUnix 的一个版本, 发布于 1983。这个版本中, 引进了著名的士SystemV
8、IPC 机制。TCPTransmission Control Protocol(传输控制协议 ).Task Queue任务队列UDPUser Datagram Protocol(用户数据报协议 ).Virtual memory虚拟内存2. 设计概览2.1 设计的驱动因素以及各自重要性的排序(例如 , 功能、性能、可靠性、硬件、内存考虑等等)在设计过程中, 主要要考虑的有以下几点: 跨平台的可移植性, 在保证功能和不牺牲性能的前提下尽量减小核心的体积, 为今后进一步开发留下空间和便利。 其中, 最主要的就是可移植性, 这是这个嵌入式系统的特色。 减少核心的体积可以降低成本, 但是随着当今硬件生产
9、技术的提高完善, 这一点已经不像过去那样重要了, 所以在裁剪核心的同时要避免牺牲性能和功能。2.2不同设计方案的评价内核采用层次式结构。这样的结构似乎层次清晰,易于修改。但是它严重降低了内核的效率。 因为当高层次的函数调用底层提供的功能时, 可能需要跨越几个层次, 这样会增加系统开销。 而且,在系统核心中,各个部分互相提供功能调用,如果严格按照层次式结构组织将打破核心中各个功能部分的有机结构,使结构变的混乱。内核采用整体式结构。这样的结构的特点是这个内核由许多过程组成,但是不像在层次式结构中那样,每个过程只能被紧挨着它的上层调用。在整体式结构中,每个过程独立编译后, 连接程序将其连接成为一个单
10、独的目标程序,每个过程都对其它过程可见。这样的结构虽然在内部关系上确实变的复杂了(各个模块间是网状的结构),但是在调用关系和提供服务的角度来看变的简单清晰也更直观了,子系统间易于访问,内核工作效率较高。而且也有助于不同的人参与不同过程的开发。所以对内核的组织采用整体式结构。2.3对所选设计方案总体结构图示及讨论内核由5个主要的子系统组成,它们之间的大致依赖关系如图。FS:文件系统IPC:进程间通信MM:内存管理NET:网络模块SCHED:进程调度进程调度子系统处于核心地位,其它子系统要完成操作都需要它来调度以占用系统资源完成自己的操作。 文件系统需要利用网络模块支持网络文件系统, 也需要利用内
11、存管理支持 RAMDISK设备。内存管理利用文件系统支持交换,交换进程定期的由调度程序调度,这也是内存管理依赖于进程调度的原因。 进程间通信子系统要依赖内存管理支持共享内存通信机制。进程调度子系统需要内存管理的支持来完成创建进程等操作。2.4开发环境(如开发语言、硬件、外设等等)内核由 GNU C语言及汇编语言开发。 硬件平台是 i386 嵌入式平台。 所支持的外设诸如标准 PC的外设,和一些基本的嵌入式系统的硬件设备。 如网络设备,显示设备,外存,音频设备,视频设备等。3. 设计描述3.1全局数据结构全局数据结构的描述。block_dev_struct数据结构用来登记块设备以被缓冲区使用。s
12、truct blk_dev_structvoid (*request_fn)(void);struct request *current_request;struct request plug;struct tq_struct plug_tq;buffer_head数据结构用来存放缓冲区中的一个数据块的信息。/* bh state bits */#define BH_Uptodate 0 /* 1缓冲区里有数据*/#define BH_Dirty 1/* 1缓冲区脏 */#define BH_Lock 2/* 1缓冲区被锁*/#define BH_Req 3/* 0缓冲区无效*/#define
13、 BH_Touched 4/* 1缓冲区被重复访问*/#define BH_Has_aged 5 /* 1缓冲区过时*/#define BH_Protected 6 /* 1缓冲区处于保护状态*/#define BH_FreeOnIO 7 /* 1 IO后丢弃缓冲区头部*/struct buffer_head /* First cache line: */unsigned long b_blocknr; /*块数目 */kdev_t b_dev; /*设备 (B_FREE = free) */kdev_t b_rdev; /*真实设备*/unsigned long b_rsector; /*磁
14、盘上的真是缓冲区*/struct buffer_head *b_next; /*信号队列列表*/struct buffer_head *b_this_page; /*一页内的缓冲区循环列表/* Second cache line: */unsigned long b_state; /*缓冲区状态掩码*/struct buffer_head *b_next_free;unsigned int b_count; /*用户使用此块*/unsigned long b_size; /*块大小 */* Non-performance-critical data follows. */char *b_dat
15、a; /*数据块指针*/unsigned int b_list; /*缓冲区发布表*/unsigned long b_flushtime; /*脏缓冲区被重写时间*/unsigned long b_lru_time; /*缓冲区上次被使用时间*/struct wait_queue *b_wait;struct buffer_head *b_prev; /*双重连接的哈希表*/struct buffer_head *b_prev_free; /*双重连接的缓冲区*/struct buffer_head *b_reqnext; /*请求队列*/*/;device系统中每一个网络设备都对应于一个设备
16、数据结构。struct device /*这里是这个结构的可见部分的第一部分(就像用户在文件Space.c中看到的一样 ).这是它的名称和接口. */char *name;/* I/O specific fields */unsigned long rmem_end;unsigned long rmem_start;unsigned long mem_end; /*共享内存结束 */unsigned long mem_start; /*共享内存起始 */unsigned long base_addr; /*设备 IO 地址 */unsigned char irq; /* device IRQ
17、number */* Low-level status flags. */volatile unsigned char start, /*开始一个操作 */interrupt; /*中断到达 */unsigned long tbusy; /*传送忙 */struct device *next; /*设备初始化,只被调用一次*/int (*init)(struct device *dev);/* 有些设备还需要下面这些字段, 但是它们不是在文件Space.c 中通常的设置项 . */unsigned char if_port; /*可选择的 AUI,TP, */unsigned char dma
18、; /* DMA通道 */struct enet_statistics* (*get_stats)(struct device *dev);/*标记了结构的可见部分的结束部分.这后面的所有字段是系统内部的,可以被随意改动*/*这些可能为将来的远程关机代码使用*/unsigned long trans_start; /*最后一次传送的时间*/unsigned long last_rx; /*最后 Rx 的时间 */unsigned short flags; /*接口标记 (BSD)*/unsigned short family; /*地址族 ID */unsigned short metric;
19、 /*路由距离 */unsigned short mtu; /* MTU值 */unsigned short type; /*硬件类型 */unsigned short hard_header_len; /*硬件地址长度 */void *priv; /*私有数据 */*接口地址信息 . */unsigned char broadcastMAX_ADDR_LEN;unsigned char pad;unsigned char dev_addrMAX_ADDR_LEN;unsigned char addr_len; /*硬件地址长度 */unsigned long pa_addr; /*协议地址
20、*/unsigned long pa_brdaddr; /*协议广播地址 */unsigned long pa_dstaddr; /* P P 协议另一端地址 */unsigned long pa_mask; /*协议网络掩码 */unsigned short pa_alen; /*协议地址长度 */struct dev_mc_list *mc_list; /* Mac广播地址 */int mc_count; /*已安装的 Mac 编号 */struct ip_mc_list *ip_mc_list; /* IP Mac 链 */_u32 tx_queue_len; /*每个队列的最大帧长度*
21、/* For load balancing driver pair support */unsigned long pkt_queue; /*包队列 */struct device *slave; /*附属设备*/struct net_alias_info *alias_info; /*主设备别名信息struct net_alias *my_alias; /*别名设备 */* Pointer to the interface buffers. */*/struct sk_buff_head buffsDEV_NUMBUFFS;/* Pointers to interface service r
22、outines. */int (*open)(struct device *dev);int (*stop)(struct device *dev);int (*hard_start_xmit) (struct sk_buff *skb, struct device *dev); int (*hard_header) (struct sk_buff *skb,struct device *dev,unsigned short type,void *daddr, void *saddr,unsigned len);int (*rebuild_header)(void *eth, struct d
23、evice *dev,unsigned long raddr,struct sk_buff *skb);void (*set_multicast_list)(struct device *dev);int (*set_mac_address)(struct device *dev,void *addr);int (*do_ioctl)(struct device *dev,struct ifreq *ifr, int cmd);int (*set_config)(struct device *dev,struct ifmap *map);void (*header_cache_bind)(st
24、ruct hh_cache *hhp,struct device *dev,unsigned short htype,_u32 daddr);void (*header_cache_update)(struct hh_cache *hh,struct device *dev,unsigned char * haddr);int (*change_mtu)(struct device *dev,int new_mtu);struct iw_statistics* (*get_wireless_stats)(struct device *dev);device_struct数据结构用来登记字符和块
25、设备( 含有相应的名字和对此设备的文件操作集 ) 。每一个chrdevs和 blkdevs向量的入口对应一个字符或块设备。struct device_struct const char * name;struct file_operations * fops;file每个打开的文件,socket接口都对应一个文件数据结构。struct filemode_t f_mode;loff_t f_pos;unsigned short f_flags;unsigned short f_count;unsigned long f_reada, f_ramax, f_raend, f_ralen, f_ra
26、win;struct file *f_next, *f_prev;int f_owner; /*将发送的SIGIO 的用户标示和组标示*/struct inode * f_inode;struct file_operations * f_op;unsigned long f_version;void *private_data; /*为 tty或其它设备需要*/;files_struct files_struct数据结构描述一个正被打开的文件。struct files_struct int count;fd_set close_on_exec;fd_set open_fds;struct fi
27、le * fdNR_OPEN;fs_structstruct fs_structint count;unsigned short umask;struct inode * root, * pwd;gendisk gendisk 数据结构含有一个硬盘的信息。当系统初始化,发现硬盘和检测分区参数时,此结构被填充。struct hd_struct long start_sect;long nr_sects; ;struct gendisk int major; /*设备主编号*/const char *major_name; /*主设备名*/int minor_shift; /* number of
28、 times minor is shifted to get real minor */int max_p; /*每个设备的最大分区数int max_nr; /*真实设备的最大个数void (*init)(struct gendisk *); /*struct hd_struct *part; /*分区表int *sizes; /*以块计数的设备大小int nr_real; /*真实设备个数*/void *real_devices; /*内部使用*/struct gendisk *next;,*/*/工作前先初始化*/*/拷贝进 blk_size */;inode 数据结构包含一个磁盘中的文件
29、或目录的信息。struct inode kdev_t i_dev;unsigned long i_ino;umode_t i_mode;nlink_t i_nlink;uid_t i_uid;gid_t i_gid;kdev_t i_rdev;off_t i_size;time_t i_atime;time_t i_mtime;time_t i_ctime;unsigned long i_blksize;unsigned long i_blocks;unsigned long i_version;unsigned long i_nrpages;struct semaphore i_sem;st
30、ruct inode_operations *i_op;struct super_block *i_sb;struct wait_queue *i_wait;struct file_lock *i_flock;struct vm_area_struct *i_mmap;struct page *i_pages;struct dquot *i_dquotMAXQUOTAS;struct inode *i_next, *i_prev;struct inode *i_hash_next, *i_hash_prev;struct inode *i_bound_to, *i_bound_by;struc
31、t 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_
32、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
33、 ufs_inode_info ufs_i; structsocket 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 irqactio
34、n 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_
35、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;
36、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; /* page->map_nr = page - mem_map
37、*/ 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, loc
38、ked_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;
39、/*被父总线看到的桥设备*/struct pci_dev *devices; /*桥后的设备*/void *sysdata; /*系统指定的外部挂钩*/unsigned char number; /*总线编号 */unsigned char primary; /*主桥编号*/unsigned char secondary; /*二级桥编号*/unsigned char subordinate; /*下级总线的最大数目*/ ;pci_dev系统中的每个PCI 设备,包括PCI-PCI 和 PCI-ISApci_dev结构。桥设备都分别对应于一个/* * There is one pci_dev
40、structure for each slot-number/function-number * combination: */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 i
41、nt class; /* 3 bytes: (base,sub,prog-if) */ unsigned int master : 1; /* set if device is master capable */* *理论上 ,中断级别可以从配置空间中获取而* 不影响其它 . 但是 , 旧的 PCI 芯片不支持* 这些寄存器并且只返回零 . 例如 ,* 芯片 Vision864-P rev 0可以使用INTA,但是返回 0*. pci_init()用 PCI_INTERRUPT_LINE 的数据初始化这个字段*.并且 pcibios_fixup()可以改变它。*.这个字段不能是0,除非改设备*
42、 根本不能产生中断 . */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 o
43、r 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;
44、 _u32 rt_dst;_u32 rt_src;_u32 rt_gateway;atomic_t rt_refcnt;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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国工程专用车市场全景调查与市场年度调研报告
- 2025年中国微乳化切削液行业市场前景预测及投资价值评估分析报告
- 2025年中国成石行业市场规模及投资前景预测分析报告
- 2025年中国抗菌不锈钢市场监测报告
- 2025年中国摆线式液压马达行业市场规模及投资前景预测分析报告
- 2025年中国旋转磁性编码器行业市场占有率及投资前景预测分析报告
- 2025年中国智能化激光切割焊接行业市场前景预测及投资价值评估分析报告
- 2025年中国果树苗木产业发展前景及供需格局预测报告
- 2025年中国油田螺纹盒保护器行业市场占有率及投资前景预测分析报告
- 2025年中国液压元件行业现状分析及赢利性研究预测报告
- 钢厂采购员设备管理制度
- 2025年广西公需真题卷及答案
- 评判性思维在护理中的应用
- 2025年社区工作者考试真题库附答案
- 亚投行贷款项目管理办法
- 中医把脉课件
- 道路桥梁工程师岗位面试问题及答案
- 《泊船瓜洲》课件
- 2025年政府投资项目谋划工作指导手册
- 2025年泸州市中考物理试卷真题(含答案解析)
- 英语二必考500词
评论
0/150
提交评论