国嵌内核笔记.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
国嵌内核笔记

真是晕阿,看国嵌的新视频居然在XP下不好使,还好可以在虚拟机下写笔记 uImage由组成Uboot header和zImage(由解压代码和vmlinux组成). 解压代码是Head.s和misc.s .s文件和内核体系相关,在arch/arm目录下 没有压缩的vmLinux由 (init)arch/arm/kernel/head.o .. (main)driver/built-in.o mm/built-in.o ..(kallsyms.o)内核符号表 Linux内核的启动流程可划分为3个阶段 1.解压缩 2.初始化 3.启动应用程序 内核内存采用内核空间和用户空间,用户3G ,每个进程都有自己独立的内存空间 ps aux 可显示全部的进程 而在开发板使用ps 好像就可以了 malloc申请内存为虚拟内存,只有访问的时候才会产生缺页异常,才会由“请页机制”分配实际页框 内核内存分配使用kmalloc(size_t size, int flags) #includelinux/slab.h 使用slab管理器分配空间,看了内核与实现还它还能分配进程结构 GFP_ATOMIC(常用)用来在进程上下文之外的代码(包括中断处理),从不睡眠。 GFP_KERNEL 进程上下文中分配,可能睡眠(16M--896M) __GFP_DMA 分配能够DMA的内存区(16M以下) __GFP_HIGHMEM 分配高端内存 (896M以上) 按页分配 (分配大块内存) get_zeroed_page (分配一页(一般4K)清零) __get_free_page (分配一页,清零) __get_free_pages (分配多个页) 使用 free_page free_pages释放 链表,通过指针将一系列数据节点连接成一条数据链,有更好的动态性,可以高效的插入和删除数据 链表分为两个域:数据域和指针域 Linux使用了大量的链表,在linux/list.h中实现的 Linux中链表的数据结构的定义 struct list_head { struct list_head *next, *prev; } 传统链表指针域指向下一节点的头部,内核链表指向下一节点的上面那个struct结构(双向循环链表)。 传统链表数据域结构变化而变化,而内核链表指针指向list_head所以跟数据的结构无关 Linux提供的链表的操作 INIT_LIST_HEAD(list_head *head)初始化链表头 可参考内核代码 list_add(struct list_head *new struct *head)在链表头插入节点(和数据无关) list_add_tail() 在链表尾插入节点 head可以是任何链表节点,不必是链表头,在中间插入一个链表可以将head指针指向他前面的那个链表 list_del()删除节点 提取数据结构 list_entry(ptr,type,member)(没明白啊:-)分析源码 留的作业 已知数据节点ptr,找出数据结构 链表的遍历 list_for_each(struct list_haed *pos, struct list_head *head) 实验代码没有啊 每当时钟中断发生时jiffies加1 unsinged j = jiffies + jit_delay*HZ; HZ可配置 x86默认是1000 while(jiffies j) { /*do nothing*/; } 延迟5s 注意jit_delay是秒 内核定时器处理函数只执行一次,使用struct timer_list描述一个内核定时器 struct timer_list{ struct list_head entry 内核使用 unsigned long expires; 超时的jiffies void(*function)(unsigned long);超时处理函数 unsigned long data;超时处理函数参数 struct tvec_base *base 内核使用 } void init_timer(struct timer_list) 且要对结构中的三个参数赋值 void add_timer(struct timer_list *timer) void del_timer(struct timer_list *timer)超时之前,超时后会自动删除 Linux内存管理子系统是操作系统最重要部分之一 Linux内核包括:系统调用接口,内存管理子系统,进程管理子系统,体系结构密切相关代码,虚拟文件系统,驱动,网络协议栈。 地址类型:物理地址,线性地址(虚拟地址),逻辑地址 物理地址:是出现在CPU地址总线上的寻

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档