摘要: 首先,需要说明的是,一个函数名代表的是一个地址,即一个函数的首地址。 知道了这一点便很容易理解函数真正的意义了。 void Fun( int a );void main() { int (*pFun)(int); //这里定义了一个函数指针pFun pFun = Fun; //这里传值,可以任意形式如 pFun =&Fun,之类的,最后编译器都会认为是一个地址 (*pFun)(2); } void Fun( int a ){ return;} 接着,我定义出一种函数指针类型,方便我操作,比如我可以这样定义我的类型... 阅读全文
posted @ 2014-04-11 16:30 敷衍。 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 对于之前我们制作好的内核文件,我们还需要下面三个步骤一:制作镜像二.安装grub2三.启动这里不描述U盘如何安装了,如果你能掌握制作虚拟镜像的方法,自然U盘不在话下了,只需修改一下有些步骤即可完成了.这里所有的步骤都是在UBUNTU 下完成的,其他linux命令稍有不同,本人没有安装其他版本的linux 也就没有实验过,不过你可以参考我的思路,然后修改修改命令,你的制作文档就完成了.一 制作虚拟设备镜像,这里我们模拟一个U盘1 产生虚拟镜像方法一:DD工具创建镜像 dd if=/dev/zero bs=512 count=20480 of=a.img*方法二:(需要安装BOCHS,当然还有各种 阅读全文
posted @ 2014-04-11 11:37 敷衍。 阅读(2187) 评论(0) 推荐(0) 编辑
摘要: 上一篇讲完简述了利用grub内核引导的流程.下面就是代码时间了.首先来看boot.S,规范上提供了范例代码,这里用NASM语法改写global loader ; making entry point visible to linkerextern kmain ; 这是kernel的入口函数 global start,_start ;默认的链接入口地址 MODULEALIGN equ 1<<0 ; align loaded modules on page boundaries... 阅读全文
posted @ 2014-04-11 11:10 敷衍。 阅读(410) 评论(0) 推荐(0) 编辑