mac的内核_Mac编程

mac的内核_Mac编程MAC内核编程指南-综述等

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

综述
为什么想起写这个类似于读书笔记的翻译呢,主要是MAC内核开发的资料基本都是en文的,中文的几乎没有(反正我没找到,你要有麻烦给一个,不甚感谢),而读en的资料对初学者来说又比较费时间,所以时间够的话我会把觉得重要的东西记下来,以飨读者。
一、Why You Should Avoid Programming in the Kernel
  一个内核bug可能导致整个系统Crash,所以应尽可能避免内核编程,而选择在用户空间编码。
二、The Early Boot Process
  和普通PC的BIOS类似,苹果机使用Boot ROM来引导和加载系统,大体流程如下:
Boot ROM
When the power to a Macintosh computer is turned on, the BootROM firmware is activated. BootROM (which is part of the computer’s hardware) has two primary responsibilities: it initializes system hardware and it selects an operating system to run. BootROM has two components to help it carry out these functions:
    •    POST (Power-On Self Test) initializes some hardware interfaces and verifies that sufficient memory is available and in a good state.
    •    EFI does basic hardware initialization and selects which operating system to use.
If multiple installations of Mac OS X are available, BootROM chooses the one that was last selected by the Startup Disk System Preference. The user can override this choice by holding down the Option key while the computer boots, which causes EFI to display a screen for choosing the boot volume.

The Boot Loader
Once BootROM is finished and a Mac OS X partition has been selected, control passes to the boot.efi boot loader. The principal job of this boot loader is to load the kernel environment. As it does this, the boot loader draws the “booting” image on the screen.
If full-disk encryption is enabled, the boot loader is responsible for drawing the login UI and prompting for the user’s password, which needed to access the encrypted disk to boot from it. (This UI is drawn by loginwindow otherwise.)
In the simplest case, the boot loader can be found in the /System/Library/CoreServices directory on the root partition, in a file named boot.efi .
Note:  Booting from a UFS volume is deprecated as of Mac OS X v10.5.
In order to speed up boot time, the boot loader uses several caches. The contents and location of these caches varies between versions of Mac OS X, but knowing some details about the caching may be helpful when debugging kernel extensions.
After you install or modify a kernel extension, touch the /System/Library/Extensions directory; the system rebuilds the caches automatically.
Important:  You should not depend on the implementation details of the kernel caches in your software.
In Mac OS X v10.7, the boot loader looks for the unified prelinked kernel. This cache contains all kernel extensions that may be needed to boot a Mac with any hardware configuration, with the extensions already linked against the kernel. It is located at /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache .
In Mac OS X v10.6 and earlier, the boot loader first looks for the prelinked kernel (also called the kernel cache). This cache contains exactly the set of kernel extensions that were needed during the previous system startup, already linked against the kernel. If the prelinked kernel is missing or unusable (for example, because a hardware configuration has changed), the booter looks for the mkext cache, which contains all kernel extensions that may be needed to boot the system. Using the mkext cache is much slower because the linker must be run. On Mac OS X v10.5 and v10.6, these caches are located in /System/Library/Caches/com.apple.kext.caches/Startup/ ; on previous versions of Mac OS X, it was located at /System/Library/Caches/com.apple.kernelcaches/ .
Finally, if the caches cannot be used, the boot loader searches /System/Library/Extensions for drivers and other kernel extensions whose OSBundleRequired property is set to a value appropriate to the type of boot (for example, local or network boot). This process is very slow, because the Info.plist file of every kernel extension must be parsed, and then the linker must be run.
For more information on how drivers are loaded, see I/O Kit Fundamentals , the manual page for kextcache , and Kernel Extension Programming Topics .

Rooting
Once the kernel and all drivers necessary for booting are loaded, the boot loader starts the kernel’s initialization procedure. At this point, enough drivers are loaded for the kernel to find the root device.
The kernel initializes the Mach and BSD data structures and then initializes the I/O Kit . The I/O Kit links the loaded drivers into the kernel, using the device tree to determine which drivers to link. Once the kernel finds the root device, it roots(*) BSD off of it.
Note:  As a terminology aside, the term “boot” was historically reserved for loading a bootstrap loader and kernel off of a disk or partition. In more recent years, the usage has evolved to allow a second meaning: the entire process from initial bootstrap until the OS is generally usable by an end user. In this case, the term is used according to the former meaning.
As used here, the term “root” refers to mounting a partition as the root, or top-level, filesystem. Thus, while the OS boots off of the root partition, the kernel roots the OS off of the partition before executing startup scripts from it.
Boot≠Root is a technology that allows the system to boot from a partition other than the root partition. This is used to boot systems where the root partition is encrypted using full-disk encryption, or where the root partition is located on a device which requires additional drivers (such as a RAID array). Boot≠Root uses a helper partition to store the files needed to boot, such as the kernel cache. For more information on how to set up the property in a filter-scheme driver, see “Developing a Filter Scheme” in Mass Storage Device Driver Programming Guide .
三、参考资料
Information on the Web
Apple maintains several websites where developers can go for general and technical information on Mac OS X.
    •    Apple Developer Connection: Developer Documentation (http://developer.apple.com/documentation/ ). Features the same documentation that is installed on Mac OS X, except that often the documentation is more up-to-date. Also includes legacy documentation.
    •    Apple Developer Connection: Mac OS X (http://developer.apple.com/devcenter/macosx/ ). Offers SDKs, release notes, product notes and news, and other resources and information related to Mac OS X.
    •    AppleCare Tech Info Library (http://www.apple.com/support/ ). Contains technical articles, tutorials, FAQs, technical notes, and other information.
Next

原书地址:http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/About/About.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184550.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据结构 图的邻接表

    数据结构 图的邻接表呃,下面该写邻接表了…….邻接表的出现是因为图若是稀疏图,用邻接矩阵会造成空间的浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用的那种。邻接表为了避免内存的浪费引入了链式存储,它的处理办法是:1.用一个一维数组存储顶点,当然你也可以用单链表存储,2.用单链表存储顶点的邻接点,可以将顶点改为结构体数组,结构体中存放邻接点的指针,邻接点也创建一个结构体,定义指针…

    2022年6月28日
    21
  • 在触发思考

    在触发思考

    2022年1月11日
    50
  • 光纤交换机划ZONE

    光纤交换机划ZONE虽然我们在媒体上可以看到许多厂商声称有SAN交换机可以选择,其实这是一种假象,绝大多数厂商的SAN交换机都是OEM几个主要品牌的。目前在SAN交换机方面真正有实力主要有:IBM、Brocade(博科)、Cisco、McDATA等,像EMC这样的软件厂商基本上都是OEM其它厂商的SAN交换机产品。下图为Brocade(博科)交换机,本文也以其为例,记录其划分命令和划分方法:连接交换机…

    2022年5月11日
    65
  • android代码实现ScaleAnimation[通俗易懂]

    android代码实现ScaleAnimation[通俗易懂]packagecom.yangguangfu.cn;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.animation.Animation;importandroid…

    2022年10月15日
    2
  • org.apache.kafka.clients_kafka源码分析

    org.apache.kafka.clients_kafka源码分析apacheKafka中国社区中国社区QQ群1:162272557未满收费5¥,保证QQ运营,腾讯QQVIP收年费,2000人群非常活跃,质量很高中国社区QQ群2:414762562未满1000人群中国社区QQ群3:191278841未满1000人群中国社区QQ群4:415846802未满1000人群每当有新blog发布时,会在此处更新,欢迎大家拍砖共同成长目录索引…

    2022年10月14日
    4
  • Web 3D机房,智能数字机房HTML5 WebGL(ThreeJS)匠心打造「建议收藏」

    Web 3D机房,智能数字机房HTML5 WebGL(ThreeJS)匠心打造「建议收藏」在H5使用3D技术门槛比较低了,它的基础是WebGL(ThreeJS),一个OpenGL的浏览器子集,支持大部分主要3D功能接口。目前主流的浏览器都有较好的支持,IE需要11。最近web3D机房研发告一段落,有时间整理这段时间的一些成果。主要涉及使用H5、js、WebGL技术。机房3D效果图机房线缆和走线架线缆的连接走向和连接关系是管理员关注的焦点。机架中…

    2022年5月5日
    159

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号