从零构建内核:分页

进入C语言后,程序直接运行在物理地址之上。为了学习和利用x86提供的分页机制,今天为内核设置分页。设置流程大概是:

  • 检测内存大小,决定页表多少
  • 初始化页目录项和页表项
  • 配置cr0和cr3寄存器

从零构建内核:进入C语言

总体思路

结合自身状况,C语言可以令我更流畅地编写操作系统,所以我匆匆准备了C语言的运行环境(C run time),尽可能早地投入C语言的怀抱。loader本应该负责的工作是:进入保护模式,设定分页,设定段描述符,设定中断,加载内核,最后跳转到内核并执行。而我在这里只完成了保护模式的加载,设定了必要的段和栈。反正能用C语言就行,后面可以用C优雅地增加设定或者重新设定。

Build Modules For A Precompiled Kernel(Copyright © 2001 Peter Jay Salzman)

Obviously, we strongly suggest you to recompile your kernel, so that you can enable a number of useful debugging features, such as forced module unloading (MODULE_FORCE_UNLOAD): when this option is enabled, you can force the kernel to unload a module even when it believes it is unsafe, via a rmmod -f module command. This option can save you a lot of time and a number of reboots during the development of a module.

在Android中使用JNI笔记

为什么在Android中使用JNI

JNI是JAVA调用C的一个接口。在Android中使用JNI的原因很多:JNI调用C执行效率可能会提高、JNI的存在使得一些成熟的C库可以被JAVA程序调用。我这里使用JNI主要是和底层交互。JAVA可以调用C,C可以调用汇编,那么JAVA就没什么做不到的了。