内核开发快速入门

阅读用时 ~1 分钟

开发环境:Xcode 8.2.1 on Sierra

新建项目时选择:Generic Kernel Extention

测试代码如下:

#include <mach/mach_types.h>
#include <libkern/libkern.h>

kern_return_t HelloWorld_start(kmod_info_t * ki, void *d);
kern_return_t HelloWorld_stop(kmod_info_t *ki, void *d);

kern_return_t HelloWorld_start(kmod_info_t * ki, void *d)
{
    printf("Hello World\n");
    return KERN_SUCCESS;
}

kern_return_t HelloWorld_stop(kmod_info_t *ki, void *d)
{
    printf("Goodbye World\n");
    return KERN_SUCCESS;
}

注:无需引入 Kernel.framework

修改Info.plist,在OSBundleLibraries下面添加如下项:

com.apple.kpi.libkern String 16.3

这里的16.3怎么来的?当然,有公式可以算出来,但是更简单的办法是通过以下命令:

kextlibs HelloWorld.kext

输出如下:

For all architectures:
    com.apple.kpi.libkern = 16.3

这个16.3就是了!

编译后将生成的HelloWorld.kext(在xcode中右键点击Products下的HelloWorld.kext)复制到桌面,执行以下命令:

sudo chown -R root:wheel HelloWorld.kext
sudo kextutil HelloWorld.kext //此处用kextload也可以,用kextutil的好处是可以看到更多的诊断信息

查看输出,Sierra中看内核日志与以前版本不同,不能使用Console.app了,要输入以下命令:

log show --predicate "processID == 0" --start 2016-12-23 --debug |grep HelloWorld

命令输出:

2016-12-23 22:29:22.596949+0800 0x2f419    Default     0x0                  0      kernel: (HelloWorld) Hello World

卸载:

sudo kextunload HelloWorld.kext

如何拼接多个图片到一个大图片

我想把几张图片拼成一个大图片,实现方式如下:安装 imagemagick{% highlight bash %}brew install imagemagick{% endhighlight %}拼接图片,例如:将1.png, 2.png, 3.png并成me.png,命令...… 继续阅读

如何阻止iOS系统升级

发布于 November 05, 2017