logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

读Kernel感悟-Linux内核启动-内核解压缩

 文章来源:http://www.top-e.org/jiaoshi/class/ 这得从vmliux.bin的产生过程说起。从内核的生成过程来看内核的链接主要有三步:第一步是把内核的源代码编译成.o文件,然后链接,这一步,链接的是arch/i386/kernel/head.S,生成的是vmlinux。注意的是这里的所有变量地址都是32位页寻址方式的保护模式下的虚拟地址。通常在

读Kernel感悟-Linux内核启动-内核的生成

这段时间在看《Linux内核源代码情景分析》,顺便写了一些感悟。读内核源代码是一件很有意思的事。它像一条线,把操作系统,编译原理,C语言,数据结构与算法,计算机体系结构等等计算机的基础课程串起来。        我看内核源代码是用lxr+glimpse(不一定要自己架,可以直接访问校内外的lxr网站)的。如果在windows下也可以用source insight。以下的当前路径为内核源代码路径

#数据结构#windows#算法
读Kernel感悟-Linux内核启动-BIOS

文章来源:http://www.top-e.org/jiaoshi/html/?196.html “真罗嗦,直接告诉我Linux下用glibc库编译出来的C程序真正的入口地址是_start()不就行了么?”臭鸡蛋扑面而来。嗯,我说了我只是想用一种特别的方式来叙述问题。我更看重探索的过程中体现的思考方式以及其中的乐趣。回到我们的主题。Linux内核为什么不是从main函数开始执行?事

#perl#bash
读Kernel感悟-Linux内核启动-开启页面映射

文章来源:http://www.top-e.org/jiaoshi/class/ 在setup的帮助下,我们顺利地从16位实地址模式过渡到32位段式寻址的保护模式。又在arch/i386/boot/compressed/head.S的帮助下实现了内核的自解压,并且从arch/i386/kernel/head.S中的startup_32开始。现在在线性地址0x100000(1M)处开始就是我

#linux#x86
读Kernel感悟-Linux内核启动-链接脚本

文章来源:http://www.top-e.org/jiaoshi/class/一般来说,用户是不需要关心section的具体位置的。在用户态,内核会解析elf可执行文件的各个section,然后把它映射到虚拟地址空间。然而,在内核启动时,一切得从零开始。很多在用户态下应用程序不需要操心的东西,例如映射section的任务不得不由内核自己来完成。上一篇感悟揭示了内核如何建立页表,并且把自身

Linux内核中EXPORT_SYMBOL的用法

文章来源:http://www.top-e.org/jiaoshi/class/EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在内核模块中直接调用。还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。   使用时注意事项:在使用EXPORT_SYMBOL 的.c文件中 需要 #include文件。//先写函数func (){ .

#测试
读Kernel感悟-Linux内核启动-从hello world说起

内核是从哪里开始执行的呢?几乎任何一本Linux内核源代码分析的书都会给出详细的答案。不过,我试图从一个不同的角度(一个初学者的角度)来叙述,而不是一上来就给出答案。从熟悉的事物入手,慢慢接近陌生的事物,这是比较常见的思路。既然都是二进制代码,那么不妨从最简单的用户态C程序,hello world开始。说不定能找到共同点。恰好我是一个喜欢寻根究底的人。也许,理解了hello world程序的启动过

#bash
Linux 驱动开发学习基本步骤

首次发表于:http://www.top-e.org/jiaoshi/html/?125.html 1.首先需要对C语言编程非常熟悉,这是在Linux下编程的基本条件。2.会写简单的Makefile,编写一个简单的应用程序,再写一个Makefile,让它能正常编译。Makefile主要目的就是用来管理编译庞大的代码文件。3.了解Linux内核的目录结构,尤其要熟悉kernel目录下的dri

#linux#算法
到底了