欢迎来到天天文库
浏览记录
ID:36927427
大小:2.20 MB
页数:223页
时间:2019-05-11
《嵌入式Linux应用开发-内核分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式Linux应用开发第三章Linux内核原理与移植初步Linux的核心代码结构Linux存储管理Linux文件管理Linux设备管理Linux的模块机制内核源代码的物理分布(1/2)内核装入(引导之前)引导扇内容:arch/i386/boot/boot.S紧随其后的内容:arch/i386/boot/setup.S。负责全部内核的读入及部分硬件初始化同时还有arch/i386/boot/video.S对显卡进行检测setup.S将整个内核读入后,进入保护模式,并用arch/i386/boot/compressed/head.S的decompress_kernel来
2、解压缩内核然后加上arch/i386/kernel/head.S形成全部内核,并从此处开始,然后调用函数start_kernel(在/init/main.c中)内核源代码的物理分布(2/2)内核引导以初始化Start_kernel(init/main.c)完成大量的初始化工作,包括各种数据结构的初始化,创建init进程(1号进程),而start_kernel函数本身以0号任务(空闲任务)形式继续,完成用cpu_idle调用idle的无限循环init进程创建内核级进程:bdflush(fs/buffer.c中)和kswapd(mm/vmscan.c中),进程号为2,3。
3、然后init进程调入/sbin/init可执行体进程管理kernel目录Sched.c:调度程序,schedule函数进程控制:fork.c(do_fork())exit.csignal.c模块化:module.cksyms.c其它:time.cpanic.cresource.csys.cdma.csysctl.csoftirq.citimer.c内存管理mm目录分页和置换swap.c处理命令swapswap_state.c置换高速缓存swapfile.c置换设备的管理Vmscan.c分页(kswapd找置换页的守护进程)分配和释放kmalloc.c内核空间的分配和释
4、放page_alloc.c分配页面vmalloc.c虚拟空间的分配、释放vmalloc,vremap,vfree内存映射filemap.c实现常规文件的映射mmap.c:do_mmap,do_munmap,sys_brkfs目录及文件系统exec.c二进制文件格式(Exec)devices.c设备注册,取消注册(open,release)block_dev.c读写块设备的缺省方法super.c与超级块有关,定义VFS统一接口inode.c高速缓冲的实现,读写inode例程等dcache.c目录的高缓实现namei.c依据名字找到索引节点号file_table.c负责f
5、ile结构的分配和释放,get_empty_filp被open,pipe,socket调用open.c包括sys_open,sys_close,chown,chmodread_write.c包含文件的读写read,writefcntl.c,ioctl.c控制函数ioctl系统调用其它IPC:util.c,sem.c,shm.c,msg.c设备驱动程序:drivers/char字符设备n_tty.cmisc.c等drivers/block块设备genhd.c分区表ll-rw-block.c物理数据的传送drivers/sound声卡drivers/net网络net_in
6、it.c等更改系统核心变更系统核心的方法直接修改核心源代码,然后重新编译应用内核模块直接修改源代码Linux源代码就是一个大型的软件系统,其各文件及目录等由Makefile组织起来,所以Makefile用来控制这一系统内核重编译内核的配置:选择哪些模块要编译进内核,那些不编译进去方法在源代码中#ifdefCONFIG_MOD1MOD1的代码#endif在Makefile中#ifdefCONFIG_MOD1OBJS=OBJSmod1.o#endif内核配置所谓内核配置就是提供用户接口,让用户来设置这些宏echoMOD1[y/n]?readyesnoifyesno==yC
7、ONFIG_MOD1=yendif在Linux下进行内核配置时敲入makeconfig(xconfig,menuconfig),在Makefile中存在这些目标其功能为列出配置选项,根据用户输入的y或n来设置相应的宏可以是否选择支持网络,支持哪些设备,支持哪些文件系统等开始编译准备工作makeclean:清除前一次编译时生成的中间文件makedep:确定文件间的依赖关系开始编译makezImage:产生内核映像文件makebzImage:如果是大内核模块支持makemodulesMakemodules_install编译完成后,会在/usr/src/
此文档下载收益归作者所有