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