what’s new in kext development€¦ · kext development overview •a kext is a bundle that...
TRANSCRIPT
![Page 1: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/1.jpg)
These are confidential sessions—please refrain from streaming, blogging, or taking pictures
Sign here please…
Session 707
What’s New in Kext Development
Jerry CottinghamSoftware Engineer Core OS IO Team
![Page 2: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/2.jpg)
• Kext Development Overview•Developer ID program• Your attention please
In This Session
![Page 3: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/3.jpg)
Target Audience
![Page 4: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/4.jpg)
Target Audience
• You are here because you develop a kext
![Page 5: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/5.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
![Page 6: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/6.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory
![Page 7: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/7.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory Mistakes are often fatal
![Page 8: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/8.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory Mistakes are often fatal Debugging is harder
![Page 9: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/9.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory Mistakes are often fatal Debugging is harder
•OK, OK, if you must…
![Page 10: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/10.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory Mistakes are often fatal Debugging is harder
•OK, OK, if you must…■ Kernel Extension Programming Topics on developer.apple.com
![Page 11: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/11.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory Mistakes are often fatal Debugging is harder
•OK, OK, if you must…■ Kernel Extension Programming Topics on developer.apple.com■ Kernel Programming Guide on developer.apple.com
![Page 12: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/12.jpg)
Target Audience
• You are here because you develop a kext• You know the top three reasons to avoid writing a kext
Kexts require wired memory Mistakes are often fatal Debugging is harder
•OK, OK, if you must…■ Kernel Extension Programming Topics on developer.apple.com■ Kernel Programming Guide on developer.apple.com
With great power comes great responsibility
![Page 13: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/13.jpg)
What is a kext?Kext Development Overview
![Page 14: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/14.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel
![Page 15: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/15.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension
![Page 16: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/16.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension■ Only available for OS X, not iOS
![Page 17: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/17.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension■ Only available for OS X, not iOS
• Structured like any CFBundle
![Page 18: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/18.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension■ Only available for OS X, not iOS
• Structured like any CFBundle■ Binary in MacOS folder
![Page 19: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/19.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension■ Only available for OS X, not iOS
• Structured like any CFBundle■ Binary in MacOS folder ■ Info.plist describes properties
![Page 20: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/20.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension■ Only available for OS X, not iOS
• Structured like any CFBundle■ Binary in MacOS folder ■ Info.plist describes properties
■ CFBundleIdentifier
![Page 21: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/21.jpg)
What is a kext?Kext Development Overview
•A kext is a bundle that extends the kernel■ Kext = Kernel Extension■ Only available for OS X, not iOS
• Structured like any CFBundle■ Binary in MacOS folder ■ Info.plist describes properties
■ CFBundleIdentifier■ CFBundleVersion Very important to update this!
![Page 22: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/22.jpg)
Protecting the kernelKext Development Overview
![Page 23: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/23.jpg)
Protecting the kernelKext Development Overview
• Specific file/folder permissions
drwxr-xr-x
root wheel
![Page 24: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/24.jpg)
Protecting the kernelKext Development Overview
• Specific file/folder permissions■ Kexts must be owned by “root,” group “wheel”
drwxr-xr-x
root wheel
![Page 25: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/25.jpg)
Protecting the kernelKext Development Overview
• Specific file/folder permissions■ Kexts must be owned by “root,” group “wheel”
■ Must only be writable by “root” drwxr-xr-x
root wheel
![Page 26: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/26.jpg)
Protecting the kernelKext Development Overview
• Specific file/folder permissions■ Kexts must be owned by “root,” group “wheel”
■ Must only be writable by “root”■ Permissions are deep (all items in bundle)
drwxr-xr-x
root wheel
![Page 27: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/27.jpg)
Protecting the kernelKext Development Overview
• Specific file/folder permissions■ Kexts must be owned by “root,” group “wheel”
■ Must only be writable by “root”■ Permissions are deep (all items in bundle)
■ Incorrect permissions = no load
drwxr-xr-x
root wheel
![Page 28: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/28.jpg)
Protecting the kernelKext Development Overview
• Specific file/folder permissions■ Kexts must be owned by “root,” group “wheel”
■ Must only be writable by “root”■ Permissions are deep (all items in bundle)
■ Incorrect permissions = no load
•Use kextutil -tn to verify your kext
drwxr-xr-x
root wheel
![Page 29: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/29.jpg)
Protecting the kernelKext Development Overview
![Page 30: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/30.jpg)
Protecting the kernelKext Development Overview
•OS X 10.9 code signing verification for kexts
![Page 31: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/31.jpg)
Protecting the kernelKext Development Overview
•OS X 10.9 code signing verification for kexts■ OS X 10.9 all kext’s signatures are verified
![Page 32: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/32.jpg)
Protecting the kernelKext Development Overview
•OS X 10.9 code signing verification for kexts■ OS X 10.9 all kext’s signatures are verified■ OS X 10.9 unsigned or invalid signatures are not fatal (with one exception)
![Page 33: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/33.jpg)
Protecting the kernelKext Development Overview
•OS X 10.9 code signing verification for kexts■ OS X 10.9 all kext’s signatures are verified■ OS X 10.9 unsigned or invalid signatures are not fatal (with one exception)
■ OS X 10.9 Signed kexts will not load on releases prior to OS X 10.8
![Page 34: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/34.jpg)
Protecting the kernelKext Development Overview
•OS X 10.9 code signing verification for kexts■ OS X 10.9 all kext’s signatures are verified■ OS X 10.9 unsigned or invalid signatures are not fatal (with one exception)
■ OS X 10.9 Signed kexts will not load on releases prior to OS X 10.8■ Valid code signatures will eventually be mandatory for all kexts
![Page 35: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/35.jpg)
Protecting the kernelKext Development Overview
•OS X 10.9 code signing verification for kexts■ OS X 10.9 all kext’s signatures are verified■ OS X 10.9 unsigned or invalid signatures are not fatal (with one exception)
■ OS X 10.9 Signed kexts will not load on releases prior to OS X 10.8■ Valid code signatures will eventually be mandatory for all kexts
•Use kextutil -tn to verify your kextBe prepared!
![Page 36: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/36.jpg)
Kext loadingKext Development Overview
![Page 37: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/37.jpg)
Kext loadingKext Development Overview
•Auto-load
![Page 38: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/38.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected
![Page 39: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/39.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
![Page 40: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/40.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
•On-demand
![Page 41: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/41.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
•On-demand■ Load by explicit path kextload ~/AppleSamplePCI.kext
![Page 42: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/42.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
•On-demand■ Load by explicit path kextload ~/AppleSamplePCI.kext
■ Load by CFBundleIdentifier kextload -b com.example.apple-samplecode.driver.SamplePCI
![Page 43: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/43.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
•On-demand■ Load by explicit path kextload ~/AppleSamplePCI.kext
■ Load by CFBundleIdentifier kextload -b com.example.apple-samplecode.driver.SamplePCI■ Searches in /System/Library/Extensions
![Page 44: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/44.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
•On-demand■ Load by explicit path kextload ~/AppleSamplePCI.kext
■ Load by CFBundleIdentifier kextload -b com.example.apple-samplecode.driver.SamplePCI■ Searches in /System/Library/Extensions
• Kernel cache build
![Page 45: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/45.jpg)
Kext loadingKext Development Overview
•Auto-load■ IOKit Kexts auto-load when matching hardware detected■ Searches in /System/Library/Extensions
•On-demand■ Load by explicit path kextload ~/AppleSamplePCI.kext
■ Load by CFBundleIdentifier kextload -b com.example.apple-samplecode.driver.SamplePCI■ Searches in /System/Library/Extensions
• Kernel cache build■ Searches in /System/Library/Extensions
![Page 46: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/46.jpg)
Kext loadingKext Development Overview
![Page 47: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/47.jpg)
Kext loadingKext Development Overview
•OS X 10.9 auto-load, on-demand load by CFBundleIdentifier, and kernel cache build
![Page 48: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/48.jpg)
Kext loadingKext Development Overview
•OS X 10.9 auto-load, on-demand load by CFBundleIdentifier, and kernel cache build■ Searches in /System/Library/Extensions and /Library/Extensions
![Page 49: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/49.jpg)
Kext loadingKext Development Overview
•OS X 10.9 auto-load, on-demand load by CFBundleIdentifier, and kernel cache build■ Searches in /System/Library/Extensions and /Library/Extensions■ Must code sign kexts in /Library/Extensions
![Page 50: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/50.jpg)
Kext Development OverviewWhere are your kexts installed?
![Page 51: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/51.jpg)
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Extensions
Auto-load and auto-search
![Page 52: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/52.jpg)
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Extensions
/Library/Application
Support
Auto-load and auto-search
![Page 53: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/53.jpg)
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Filesystems
/System/Library
/Extensions
/Library/Application
Support
Auto-load and auto-search
![Page 54: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/54.jpg)
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
Auto-load and auto-search
![Page 55: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/55.jpg)
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
/Library/StartupItems
Auto-load and auto-search
![Page 56: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/56.jpg)
/Applications
Inside app bundles
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
/Library/StartupItems
Auto-load and auto-search
![Page 57: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/57.jpg)
/Applications
Inside app bundles
/Library/Extensions
Kext Development OverviewWhere are your kexts installed?
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
/Library/StartupItems
Auto-load and auto-search
Did not support auto-load or auto-search
![Page 58: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/58.jpg)
Kext Development OverviewOS X 10.9—Where are your kexts installed?
/Applications /Library/Extensions
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
/Library/StartupItems
![Page 59: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/59.jpg)
Kext Development OverviewOS X 10.9—Where are your kexts installed?
/Applications /Library/Extensions
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
/Library/StartupItems
Auto-load and auto-search
NEW! Auto-load and auto-search
![Page 60: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/60.jpg)
Kext Development OverviewOS X 10.9—Where are your kexts installed?
/Applications
Must be signed!
/Library/Extensions
/System/Library
/Filesystems
/Library/Filesystems
/System/Library
/Extensions
/Library/Application
Support
/Library/StartupItems
Auto-load and auto-search
NEW! Auto-load and auto-search
![Page 61: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/61.jpg)
Where we want your kexts installedKext Development Overview
![Page 62: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/62.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts
![Page 63: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/63.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed
![Page 64: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/64.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)
![Page 65: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/65.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)■ OS X 10.8 and earlier, install unsigned kext in /System/Library/Extensions
![Page 66: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/66.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)■ OS X 10.8 and earlier, install unsigned kext in /System/Library/Extensions
•All other kexts
![Page 67: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/67.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)■ OS X 10.8 and earlier, install unsigned kext in /System/Library/Extensions
•All other kexts■ Signed kexts CAN go into /Library/Extensions
![Page 68: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/68.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)■ OS X 10.8 and earlier, install unsigned kext in /System/Library/Extensions
•All other kexts■ Signed kexts CAN go into /Library/Extensions■ Do not install anywhere in /System Future proof your kext
![Page 69: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/69.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)■ OS X 10.8 and earlier, install unsigned kext in /System/Library/Extensions
•All other kexts■ Signed kexts CAN go into /Library/Extensions■ Do not install anywhere in /System■ Other common locations still OK
Future proof your kext
![Page 70: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/70.jpg)
Where we want your kexts installedKext Development Overview
•Auto-load, kexts required for rooting, or auto-searching of kexts■ OS X 10.9, /Library/Extensions MUST be signed■ OS X 10.9, /System/Library/Extensions (for compatibility)■ OS X 10.8 and earlier, install unsigned kext in /System/Library/Extensions
•All other kexts■ Signed kexts CAN go into /Library/Extensions■ Do not install anywhere in /System■ Other common locations still OK
•May need to install two kexts for compatibility with multiple releases
Future proof your kext
![Page 71: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/71.jpg)
Sign here please…Developer ID Program
![Page 72: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/72.jpg)
Sign here please…Developer ID Program
• Part of Mac Development Program
![Page 73: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/73.jpg)
Sign here please…Developer ID Program
• Part of Mac Development Program•Allows distribution of applications outside of Mac App Store
![Page 74: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/74.jpg)
Sign here please…Developer ID Program
• Part of Mac Development Program•Allows distribution of applications outside of Mac App Store• Special Developer ID certificate for signing applications
![Page 75: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/75.jpg)
Sign here please…Developer ID Program
• Part of Mac Development Program•Allows distribution of applications outside of Mac App Store• Special Developer ID certificate for signing applications•New with OS X 10.9, certificate for signing applications and kexts
![Page 76: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/76.jpg)
Sign here please…Developer ID Program
![Page 77: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/77.jpg)
Sign here please…Developer ID Program
•Getting your Developer ID certificate
![Page 78: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/78.jpg)
Sign here please…Developer ID Program
•Getting your Developer ID certificate1. Go to https://developer.apple.com/resources/developer-id/
![Page 79: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/79.jpg)
Sign here please…Developer ID Program
•Getting your Developer ID certificate1. Go to https://developer.apple.com/resources/developer-id/2. Click on link to request Developer ID certificate for signing kexts
![Page 80: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/80.jpg)
Sign here please…Developer ID Program
•Getting your Developer ID certificate1. Go to https://developer.apple.com/resources/developer-id/2. Click on link to request Developer ID certificate for signing kexts3. Fill out form
![Page 81: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/81.jpg)
Sign here please…Developer ID Program
•Getting your Developer ID certificate1. Go to https://developer.apple.com/resources/developer-id/2. Click on link to request Developer ID certificate for signing kexts3. Fill out form4. Once form is approved, go to request a Developer ID certificate in the
“Certificates, Identifier, and Profiles” area of Member Center
![Page 82: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/82.jpg)
Developer ID ProgramSign here please…
![Page 83: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/83.jpg)
Sign here please…Developer ID Program
![Page 84: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/84.jpg)
Sign here please…Developer ID Program
• Part of Mac Development Program•Allows distribution of applications outside of Mac App Store• Special Developer ID certificate for signing applications•New with OS X 10.9, certificate for signing applications, and kexts• For more info
■ https://developer.apple.com/resources/developer-id/■ See session 702 from WWDC 2012 (Gatekeeper and Developer ID)
![Page 85: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/85.jpg)
In OS X 10.9Your Attention Please
![Page 86: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/86.jpg)
In OS X 10.9Your Attention Please
• Kexts in /Library/Extensions will not load if they are unsigned or have a signature verification error
![Page 87: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/87.jpg)
In OS X 10.9Your Attention Please
• Kexts in /Library/Extensions will not load if they are unsigned or have a signature verification error•User will see the “no load” alert dialog
Invalid signature or unsigned kexts!
This means YOU!
![Page 88: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/88.jpg)
In OS X 10.9Your Attention Please
![Page 89: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/89.jpg)
In OS X 10.9
• Kexts outside /Library/Extensions will load if they are unsigned or have a signature verification error
Your Attention Please
![Page 90: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/90.jpg)
In OS X 10.9
• Kexts outside /Library/Extensions will load if they are unsigned or have a signature verification error• But user will see the “unidentified developer” alert dialog
Your Attention Please
This means YOU!
![Page 91: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/91.jpg)
In OS X 10.9Your Attention Please
![Page 92: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/92.jpg)
In OS X 10.9Your Attention Please
• Code signature verification warnings and error messages
![Page 93: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/93.jpg)
In OS X 10.9Your Attention Please
• Code signature verification warnings and error messages•Most common code signature verification error codes
![Page 94: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/94.jpg)
In OS X 10.9Your Attention Please
• Code signature verification warnings and error messages•Most common code signature verification error codes
■ -67030 : something in kext bundle was modified
![Page 95: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/95.jpg)
In OS X 10.9Your Attention Please
• Code signature verification warnings and error messages•Most common code signature verification error codes
■ -67030 : something in kext bundle was modified■ -67062 : kext is not code signed
![Page 96: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/96.jpg)
In OS X 10.9Your Attention Please
• Code signature verification warnings and error messages•Most common code signature verification error codes
■ -67030 : something in kext bundle was modified■ -67062 : kext is not code signed■ Code signing error codes are in Security.framework:
■ #include <Security/CSCommon.h>
![Page 97: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/97.jpg)
com.apple.kextd[40]: WARNING - Invalid signature -67030 for kext URL = "file:///Users/local/AppleSamplePCI.kext/", ID = "com.example.apple-samplecode.driver.SamplePCI"
In OS X 10.9Your Attention Please
• Code signature verification warnings and error messages•Most common code signature verification error codes
■ -67030 : something in kext bundle was modified■ -67062 : kext is not code signed■ Code signing error codes are in Security.framework:
■ #include <Security/CSCommon.h>
After modified Info.plist
![Page 98: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/98.jpg)
Summary
![Page 99: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/99.jpg)
• Sign your kext with Developer ID certificate
Summary
![Page 100: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/100.jpg)
• Sign your kext with Developer ID certificate•Get out of /System/Library/Extensions
Summary
![Page 101: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/101.jpg)
• Sign your kext with Developer ID certificate•Get out of /System/Library/Extensions
■ In fact ALL of /System
Summary
Talk to us if you think you need to be here!
![Page 102: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/102.jpg)
• Sign your kext with Developer ID certificate•Get out of /System/Library/Extensions
■ In fact ALL of /System
•Get into /Library/Extensions
Summary
Talk to us if you think you need to be here!
![Page 103: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/103.jpg)
These are confidential sessions—please refrain from streaming, blogging, or taking pictures
A sign of the times
Session 707
What’s New in Kext Development
Dean ReeceCore OS IO Team Manager
![Page 104: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/104.jpg)
The toolsBuilding a Signed Kext for OS X 10.9
•Use OS X 10.8.3 or later■ Required for correct signing
![Page 105: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/105.jpg)
The toolsBuilding a Signed Kext for OS X 10.9
•Use OS X 10.8.3 or later■ Required for correct signing
•Use Xcode 4.6 or later■ Xcode 5.0 preferred
![Page 106: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/106.jpg)
The toolsBuilding a Signed Kext for OS X 10.9
•Use OS X 10.8.3 or later■ Required for correct signing
•Use Xcode 4.6 or later■ Xcode 5.0 preferred
• Requires Developer ID certificate for Applications and Kernel Extensions■ Acquire from Apple Developer website■ Install in your keychain
![Page 107: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/107.jpg)
Building a Signed Kext for OS X 10.9New Xcode project
![Page 108: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/108.jpg)
Building a Signed Kext for OS X 10.9New Xcode project
![Page 109: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/109.jpg)
Building a Signed Kext for OS X 10.9New Xcode project
![Page 110: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/110.jpg)
Building a Signed Kext for OS X 10.9New Xcode project
![Page 111: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/111.jpg)
Building a Signed Kext for OS X 10.9New Xcode project
![Page 112: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/112.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• Set SDK and Deployment for OS X 10.9• Enable code signing• Install kext in /Library/Extensions
![Page 113: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/113.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• In “Architectures” section■ Set Architecture to “Standard Architectures”■ Set Base SDK to Latest OS X (OS X 10.9)
![Page 114: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/114.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• In “Architectures” section■ Set Architecture to “Standard Architectures”■ Set Base SDK to Latest OS X (OS X 10.9)
![Page 115: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/115.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• In “Code Signing” section■ Set “Code Signing Identity” to Developer ID: *
![Page 116: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/116.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• In “Code Signing” section■ Set “Code Signing Identity” to Developer ID: *
![Page 117: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/117.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• In “Deployment” section■ Set Installation Directory to “/Library/Extensions” ■ Set OS X Deployment Target to OS X 10.9
![Page 118: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/118.jpg)
Build settingsBuilding a Signed Kext for OS X 10.9
• In “Deployment” section■ Set Installation Directory to “/Library/Extensions” ■ Set OS X Deployment Target to OS X 10.9
![Page 119: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/119.jpg)
CodingBuilding a Signed Kext for OS X 10.9
![Page 120: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/120.jpg)
CodingBuilding a Signed Kext for OS X 10.9
• Kexts may only use Kernel.framework■ Applications may not use Kernel.framework
![Page 121: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/121.jpg)
CodingBuilding a Signed Kext for OS X 10.9
• Kexts may only use Kernel.framework■ Applications may not use Kernel.framework
•OSObject (sub)classes must use OSDeclare* and OSDefine* macros■ Required for release-to-release binary compatibility■ Without, kext will not load on future releases■ See OSMetaclass.h
![Page 122: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/122.jpg)
CodingBuilding a Signed Kext for OS X 10.9
• Kexts may only use Kernel.framework■ Applications may not use Kernel.framework
•OSObject (sub)classes must use OSDeclare* and OSDefine* macros■ Required for release-to-release binary compatibility■ Without, kext will not load on future releases■ See OSMetaclass.h
•Must not strip necessary symbols from kext binary■ Safe to use strip -S -x
![Page 123: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/123.jpg)
Build, test, and deployBuilding a Signed Kext for OS X 10.9
![Page 124: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/124.jpg)
Build, test, and deployBuilding a Signed Kext for OS X 10.9
• Builds one kext
![Page 125: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/125.jpg)
Build, test, and deployBuilding a Signed Kext for OS X 10.9
• Builds one kext• Kext should load on OS X 10.9 without warnings or alerts
![Page 126: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/126.jpg)
Build, test, and deployBuilding a Signed Kext for OS X 10.9
• Builds one kext• Kext should load on OS X 10.9 without warnings or alerts•Use lldb for kernel debugging
■ Requires OS X 10.9 on both host and system under test
![Page 127: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/127.jpg)
Build, test, and deployBuilding a Signed Kext for OS X 10.9
• Builds one kext• Kext should load on OS X 10.9 without warnings or alerts•Use lldb for kernel debugging
■ Requires OS X 10.9 on both host and system under test
•After packaging, verify installed into in /Library/Extensions
![Page 128: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/128.jpg)
Add a build targetBuilding a Kext for OS X 10.8 and Later
• Start with OS X 10.9 kext example•Add a 2nd kext target for OS X 10.8 kext• Same values used for initial project setup
![Page 129: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/129.jpg)
Add a build targetBuilding a Kext for OS X 10.8 and Later
• Start with OS X 10.9 kext example•Add a 2nd kext target for OS X 10.8 kext• Same values used for initial project setup
![Page 130: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/130.jpg)
Build settingsBuilding a Kext for OS X 10.8 and Later
![Page 131: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/131.jpg)
Build settingsBuilding a Kext for OS X 10.8 and Later
•Under “Kernel Module”
![Page 132: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/132.jpg)
Build settingsBuilding a Kext for OS X 10.8 and Later
•Under “Kernel Module”■ “Module Identifier” must be same
![Page 133: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/133.jpg)
Build settingsBuilding a Kext for OS X 10.8 and Later
•Under “Kernel Module”■ “Module Identifier” must be same
■ “Module Version” must be lower for OS X 10.8 target
![Page 134: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/134.jpg)
Build settingsBuilding a Kext for OS X 10.8 and Later
•Under “Kernel Module”■ “Module Identifier” must be same
■ “Module Version” must be lower for OS X 10.8 target
■ Necessary for OS to select correct kext
![Page 135: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/135.jpg)
Build settings (OS X 10.8 Target)Building a Kext for OS X 10.8 and Later
• Set SDK and Deployment for OS X 10.8•Disable code signing• Install kext in /System/Library/Extensions
![Page 136: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/136.jpg)
Build settings (OS X 10.8 Target)
• In “Architectures” section■ Set Architecture to “Standard Architectures”■ Set Base SDK to OS X 10.8
Building a Kext for OS X 10.8 and Later
![Page 137: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/137.jpg)
Build settings (OS X 10.8 Target)
• In “Architectures” section■ Set Architecture to “Standard Architectures”■ Set Base SDK to OS X 10.8
Building a Kext for OS X 10.8 and Later
![Page 138: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/138.jpg)
Build settings (OS X 10.8 Target)Building a Kext for OS X 10.8 and Later
• In “Code Signing” section■ Set “Code Signing Identity” to “Don’t Code Sign”
![Page 139: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/139.jpg)
Build settings (OS X 10.8 Target)Building a Kext for OS X 10.8 and Later
• In “Code Signing” section■ Set “Code Signing Identity” to “Don’t Code Sign”
![Page 140: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/140.jpg)
Build settings (OS X 10.8 Target)Building a Kext for OS X 10.8 and Later
• In “Deployment” section■ Set Installation Directory to “/System/Library/Extensions” ■ Set OS X Deployment Target to OS X 10.8
![Page 141: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/141.jpg)
Build settings (OS X 10.8 Target)Building a Kext for OS X 10.8 and Later
• In “Deployment” section■ Set Installation Directory to “/System/Library/Extensions” ■ Set OS X Deployment Target to OS X 10.8
![Page 142: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/142.jpg)
Build, test, and deployBuilding a Kext for OS X 10.8 and Later
• Builds two kexts
![Page 143: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/143.jpg)
Build, test, and deployBuilding a Kext for OS X 10.8 and Later
• Builds two kexts• Signed kext
■ Should load on OS X 10.9 without warnings or alerts■ Use lldb to debug■ Verify installed into /Library/Extensions
![Page 144: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/144.jpg)
Build, test, and deployBuilding a Kext for OS X 10.8 and Later
• Builds two kexts• Signed kext
■ Should load on OS X 10.9 without warnings or alerts■ Use lldb to debug■ Verify installed into /Library/Extensions
•Unsigned kext■ Should load on OS X 10.8■ Use gdb to debug■ Verify installed into /System/Library/Extensions
![Page 145: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/145.jpg)
Build, test, and deployBuilding a Kext for OS X 10.8 and Later
• Builds two kexts• Signed kext
■ Should load on OS X 10.9 without warnings or alerts■ Use lldb to debug■ Verify installed into /Library/Extensions
•Unsigned kext■ Should load on OS X 10.8■ Use gdb to debug■ Verify installed into /System/Library/Extensions
• Consider Installer script to avoid installing OS X 10.8 kext on OS X 10.9
![Page 146: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/146.jpg)
The toolsBuilding a Kext for OS X 10.7 and Later
•Use OS X 10.8.3 or later■ Required for correct signing
![Page 147: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/147.jpg)
The toolsBuilding a Kext for OS X 10.7 and Later
•Use OS X 10.8.3 or later■ Required for correct signing
•Use Xcode 4.6—not Xcode 5.0■ Required for OS X 10.7 SDK
![Page 148: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/148.jpg)
The toolsBuilding a Kext for OS X 10.7 and Later
•Use OS X 10.8.3 or later■ Required for correct signing
•Use Xcode 4.6—not Xcode 5.0■ Required for OS X 10.7 SDK
• Requires Developer ID certificate for Applications and Kernel Extensions■ Acquire from Apple Developer website■ Install in your keychain
![Page 149: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/149.jpg)
Add a build targetBuilding a Kext for OS X 10.7 and Later
• Same two-target approach as previously shown■ OS X 10.9 target identical
![Page 150: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/150.jpg)
Add a build targetBuilding a Kext for OS X 10.7 and Later
• Same two-target approach as previously shown■ OS X 10.9 target identical
• 2nd target has slightly different settings■ OS X 10.7 SDK and deployment target■ Need to add 32-bit architecture■ Resulting kext will work on OS X 10.7 and OS X 10.8
![Page 151: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/151.jpg)
Build settingsBuilding a Kext for OS X 10.7 and Later
![Page 152: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/152.jpg)
Build settingsBuilding a Kext for OS X 10.7 and Later
•Under “Kernel Module”
![Page 153: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/153.jpg)
Build settingsBuilding a Kext for OS X 10.7 and Later
•Under “Kernel Module”■ “Module Identifier” must be same
![Page 154: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/154.jpg)
Build settingsBuilding a Kext for OS X 10.7 and Later
•Under “Kernel Module”■ “Module Identifier” must be same
■ “Module Version” must be lower for OS X 10.7 target
![Page 155: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/155.jpg)
Build settingsBuilding a Kext for OS X 10.7 and Later
•Under “Kernel Module”■ “Module Identifier” must be same
■ “Module Version” must be lower for OS X 10.7 target
■ Necessary for OS to select correct kext
![Page 156: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/156.jpg)
Build settings (OS X 10.7 Target)
• In “Architectures” section■ Set Architecture to “Standard (32/64-bit Intel)”■ Set Base SDK to OS X 10.7
Building a Kext for OS X 10.7 and Later
![Page 157: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/157.jpg)
Build settings (OS X 10.7 Target)
• In “Architectures” section■ Set Architecture to “Standard (32/64-bit Intel)”■ Set Base SDK to OS X 10.7
Building a Kext for OS X 10.7 and Later
![Page 158: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/158.jpg)
Build settings (OS X 10.7 Target)Building a Kext for OS X 10.7 and Later
• In “Code Signing” section■ Set “Code Signing Identity” to “Don’t Code Sign”
![Page 159: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/159.jpg)
Build settings (OS X 10.7 Target)Building a Kext for OS X 10.7 and Later
• In “Code Signing” section■ Set “Code Signing Identity” to “Don’t Code Sign”
![Page 160: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/160.jpg)
Build settings (OS X 10.7 Target)Building a Kext for OS X 10.7 and Later
• In “Deployment” section■ Set Installation Directory to “/System/Library/Extensions” ■ Set OS X Deployment Target to OS X 10.7
![Page 161: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/161.jpg)
Build settings (OS X 10.7 Target)Building a Kext for OS X 10.7 and Later
• In “Deployment” section■ Set Installation Directory to “/System/Library/Extensions” ■ Set OS X Deployment Target to OS X 10.7
![Page 162: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/162.jpg)
Build, test, and deployBuilding a Kext for OS X 10.7 and Later
![Page 163: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/163.jpg)
Build, test, and deployBuilding a Kext for OS X 10.7 and Later
• Builds two kexts
![Page 164: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/164.jpg)
Build, test, and deployBuilding a Kext for OS X 10.7 and Later
• Builds two kexts• Signed kext
■ Should load on OS X 10.9 without warnings or alerts■ Use lldb to debug■ Verify installed into /Library/Extensions
![Page 165: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/165.jpg)
Build, test, and deployBuilding a Kext for OS X 10.7 and Later
• Builds two kexts• Signed kext
■ Should load on OS X 10.9 without warnings or alerts■ Use lldb to debug■ Verify installed into /Library/Extensions
•Unsigned kext■ Should load on OS X 10.7 and OS X 10.8■ Use gdb to debug■ Verify installed into /System/Library/Extensions
![Page 166: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/166.jpg)
Build, test, and deployBuilding a Kext for OS X 10.7 and Later
• Builds two kexts• Signed kext
■ Should load on OS X 10.9 without warnings or alerts■ Use lldb to debug■ Verify installed into /Library/Extensions
•Unsigned kext■ Should load on OS X 10.7 and OS X 10.8■ Use gdb to debug■ Verify installed into /System/Library/Extensions
• Consider Installer script to avoid installing OS X 10.8 kext on OS X 10.9
![Page 167: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/167.jpg)
Two projectsBuilding Kexts for Older Releases
• If you need to target releases prior to OS X 10.7■ Create two or more kext projects■ Must use prior versions of Xcode for older SDKs■ May need to build on multiple OS releases
![Page 168: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/168.jpg)
Two projectsBuilding Kexts for Older Releases
• If you need to target releases prior to OS X 10.7■ Create two or more kext projects■ Must use prior versions of Xcode for older SDKs■ May need to build on multiple OS releases
•OS X 10.9 kext project installs in /Library/Extensions
![Page 169: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/169.jpg)
Two projectsBuilding Kexts for Older Releases
• If you need to target releases prior to OS X 10.7■ Create two or more kext projects■ Must use prior versions of Xcode for older SDKs■ May need to build on multiple OS releases
•OS X 10.9 kext project installs in /Library/Extensions• Target other OS releases with additional project(s)
■ Follow compatibility guidance from those releases■ Install unsigned kext(s) in /System/Library/Extensions
![Page 170: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/170.jpg)
Two projectsBuilding Kexts for Older Releases
• If you need to target releases prior to OS X 10.7■ Create two or more kext projects■ Must use prior versions of Xcode for older SDKs■ May need to build on multiple OS releases
•OS X 10.9 kext project installs in /Library/Extensions• Target other OS releases with additional project(s)
■ Follow compatibility guidance from those releases■ Install unsigned kext(s) in /System/Library/Extensions
• Installer script can skip kexts for releases older than target OS volume
![Page 171: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/171.jpg)
Compatibility Summary
To Support OS X 10.7+ OS X 10.8+ OS X 10.9
OS X 10.9 TargetOS X 10.9 TargetOS X 10.9 Target
Legacy TargetLegacy TargetLegacy Target
Development System
OS X 10.8.3+
Development System
Xcode 4.6 Xcode 4.6 or 5.0
SDK and Deployment OS X 10.9
Code Sign Developer ID
Install Path /Library/Extensions
SDK and Deployment OS X 10.7 OS X 10.8 n/a
Code Sign Don’t Code Sign n/a
Install Path /System/Library/Extensions/System/Library/Extensions n/a
![Page 172: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/172.jpg)
These are confidential sessions—please refrain from streaming, blogging, or taking pictures
Or, how I learned to love debugging and ignore the bomb
Session 707
lldb Kernel Debugging
Brian BechtelCore OS Panic Triage
![Page 173: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/173.jpg)
![Page 174: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/174.jpg)
Your first 10,000 panics are the hardest to debug.After that, it gets somewhat easier.
![Page 175: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/175.jpg)
lldb—A New, Powerful Debugger
• Integration with llvm and the rest of the development tool chain■ More knowledge shared between compiler and debugger
•Much faster• Better supported and actively being developed
![Page 176: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/176.jpg)
lldb—A New, Powerful Debugger
• Extremely powerful Python scripting language■ Lets you do anything Python can do
• gdb to lldb command maphttp://lldb.llvm.org/lldb-gdb.html
• The debugger for OS X 10.9 and beyond
![Page 177: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/177.jpg)
gdb is Dead
• gdb is gone in Xcode 5.0■ No gdb binaries■ No kgmacros file in Kernel Debug Kit for OS X 10.9 or later■ No plan to fix any issues remaining
• Still the debugger of choice for OS X 10.8 and earlier■ Available as part of Xcode 4.6
![Page 178: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/178.jpg)
Demozprint in gdb versus zprint in lldb
![Page 179: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/179.jpg)
![Page 180: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/180.jpg)
![Page 181: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/181.jpg)
Minor improvements in output formatStandard kgmacros Are Still There
paniclogbacktraceshowcurrentstacksshowalltasksshowallstackszombproczombstackszprintshowallkmodsshowallvmstatsmemstatssystemlogshowbootargs
![Page 182: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/182.jpg)
Adding Kext Symbols
•On startup lldb will scan kexts installed in■ /System/Library/Extensions■ /Library/Extensions■ /Volumes/KernelDebugKit■ Additional locations can be specified in ~/.lldbinit
settings set platform.plugin.darwin-kernel.kext-directories /tmp /a /b
•Add additional kext symbols using the addkext macro
![Page 183: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/183.jpg)
Watch Out For
• “backtick” expression for evaluationx/i `myRoutine+0x18`
• lldb is pedantic about “->” versus “.”p myStruct->myField
•May need to cast a variable very explicitly to display correctlyp *(struct myStruct*)myVariable
• File bugs■ http://bugreporter.apple.com
![Page 184: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/184.jpg)
Mixed Mode Disassembly
disassemble -f -m
■ The entire current frame
disassemble -l -m
■ The current line
disassemble -s {address} -e {address} -m
■ From start address to end address
• In lldb minimum abbreviations are allowed
![Page 185: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/185.jpg)
(lldb) di -n fseventsf_write -mmach_kernel`fseventsf_write at vfs_fsevents.c:1537 1536! ! ! __unused int flags, __unused vfs_context_t ctx) 1537! { 1538! return EIO; 0xffffff800ae04810: pushq %rbp 0xffffff800ae04811: movq %rsp, %rbp 0xffffff800ae04814: movl $5, %eaxmach_kernel`fseventsf_write + 9 at vfs_fsevents.c:1538 1537! { 1538! return EIO; 1539! } 0xffffff800ae04819: popq %rbp 0xffffff800ae0481a: ret
Mixed Mode Disassembly
![Page 186: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/186.jpg)
(lldb) di -n fseventsf_write -mmach_kernel`fseventsf_write at vfs_fsevents.c:1537 1536! ! ! __unused int flags, __unused vfs_context_t ctx) 1537! { 1538! return EIO; 0xffffff800ae04810: pushq %rbp 0xffffff800ae04811: movq %rsp, %rbp 0xffffff800ae04814: movl $5, %eaxmach_kernel`fseventsf_write + 9 at vfs_fsevents.c:1538 1537! { 1538! return EIO; 1539! } 0xffffff800ae04819: popq %rbp 0xffffff800ae0481a: ret
Mixed Mode Disassembly
![Page 187: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/187.jpg)
(lldb) di -n fseventsf_write -mmach_kernel`fseventsf_write at vfs_fsevents.c:1537 1536! ! ! __unused int flags, __unused vfs_context_t ctx) 1537! { 1538! return EIO; 0xffffff800ae04810: pushq %rbp 0xffffff800ae04811: movq %rsp, %rbp 0xffffff800ae04814: movl $5, %eaxmach_kernel`fseventsf_write + 9 at vfs_fsevents.c:1538 1537! { 1538! return EIO; 1539! } 0xffffff800ae04819: popq %rbp 0xffffff800ae0481a: ret
Mixed Mode Disassembly
![Page 188: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/188.jpg)
(lldb) di -n fseventsf_write -mmach_kernel`fseventsf_write at vfs_fsevents.c:1537 1536! ! ! __unused int flags, __unused vfs_context_t ctx) 1537! { 1538! return EIO; 0xffffff800ae04810: pushq %rbp 0xffffff800ae04811: movq %rsp, %rbp 0xffffff800ae04814: movl $5, %eaxmach_kernel`fseventsf_write + 9 at vfs_fsevents.c:1538 1537! { 1538! return EIO; 1539! } 0xffffff800ae04819: popq %rbp 0xffffff800ae0481a: ret
Mixed Mode Disassembly
![Page 189: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/189.jpg)
(lldb) di -n fseventsf_write -mmach_kernel`fseventsf_write at vfs_fsevents.c:1537 1536! ! ! __unused int flags, __unused vfs_context_t ctx) 1537! { 1538! return EIO; 0xffffff800ae04810: pushq %rbp 0xffffff800ae04811: movq %rsp, %rbp 0xffffff800ae04814: movl $5, %eaxmach_kernel`fseventsf_write + 9 at vfs_fsevents.c:1538 1537! { 1538! return EIO; 1539! } 0xffffff800ae04819: popq %rbp 0xffffff800ae0481a: ret
Mixed Mode Disassembly
![Page 190: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/190.jpg)
lldb kgmacros Additional Arguments
-o /tmp/foo # output to file /tmp/foo-s search_string # grep for search_string in output-v # sets verbosity +1-v -v -v # increases verbosity +3
• Example, to find load information for just “AppleSamplePCI.kext”showallkmods -s AppleSamplePCI
![Page 191: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/191.jpg)
lldbmacros Precautions
• lldbmacros do not automatically load in lldb■ prevents you from debugging a malicious application and getting evil lldb macros from a hidden symbol file
• To overcome this, add to your ~/.lldbinit filesettings set target.load-script-from-symbol-file true
•Add custom python to Resources/Python in your kext bundleAppleSamplePCI.kext.dSYM/Contents/Resources/Python/
![Page 192: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/192.jpg)
Faster Loading, No Symbols
• To speed startup and not load all kext symbols, use settings set plugin.dynamic-loader.darwin-kernel.load-kexts false
• To load your kext symbols after connecting, the commands areaddkext <uuid> : Load one kext based on uuidaddkext -N <name> : Load one kext that matches the name providedaddkext -F <abs/path/to/executable> <address>addkext all : Will load all the kext symbols - SLOW
![Page 193: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/193.jpg)
Use nvram to Enable Debugging
•With no debug boot-args set, system automatically reboots on panic■ OS X 10.8 or later
• Set boot-args using the nvram command line tool as root■ Must reboot to let settings take effect
• debug flags are a bit map of behaviors■ See table 20-1 of “Kernel Programming Guide”■ E.g. 0x4 is DB_NMI (drop into debugger on NMI)
![Page 194: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/194.jpg)
Ways to Connect
• Built-in Ethernet • Built-in Firewire (e.g. iMac)• Thunderbolt->Ethernet adapter• Thunderbolt->Firewire adapter•Apple Thunderbolt Display -> Ethernet•Apple Thunderbolt Display -> Firewire•No wireless, no USB
![Page 195: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/195.jpg)
kdp_match_name
• Two machine debugging assumes “network” port of en0• If not, add “kdp_match_name={something}” to boot-args
■ {something} depends upon your connection
• ifconfig will tell you appropriate ports
![Page 196: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/196.jpg)
Two Machine Debugging
•Use ifconfig to find appropriate port nameen1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500! options=2b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4>! ether 3c:07:54:27:8d:0b ! inet6 fe80::3e07:54ff:fe27:8d0b%en1 prefixlen 64 scopeid 0x4 ! inet6 2620:149:4:202:3e07:54ff:fe27:8d0b prefixlen 64 autoconf ! inet6 2620:149:4:202:68ca:1665:6165:9944 prefixlen 64 autoconf temporary ! inet 10.0.40.2 netmask 0xfffffc00 broadcast 10.0.255.255! media: autoselect (1000baseT <full-duplex,flow-control>)! status: active
![Page 197: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/197.jpg)
Two Machine Debugging
• Built-in Ethernetsudo nvram boot-args=”debug=0x144”
![Page 198: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/198.jpg)
Two Machine Debugging
• Thunderbolt -> Ethernetsudo nvram boot-args=”debug=0x144 kdp_match_name=en2”
•Apple Thunderbolt Display -> Ethernetsudo nvram boot-args=”debug=0x144 kdp_match_name=en4”
■ Use port from ifconfig instead of en4 or en2
![Page 199: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/199.jpg)
Two Machine Debugging
•Native Firewiresudo nvram boot-args=”debug=0x144 kdp_match_name=firewire”
• Thunderbolt -> Firewiresudo nvram boot-args=”debug=0x144 kdp_match_name=firewire fwkdp=0x8000”
•Apple Thunderbolt Display -> Firewiresudo nvram boot-args=”debug=0x144 kdp_match_name=firewire fwkdp=0x8000”
•Always reboot to let settings take effect
![Page 200: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/200.jpg)
Firewire Debugging
• In one terminal windowfwkdp
• In a second terminal windowxcrun lldb /Volumes/KernelDebugKit/mach_kernelkdp-remote localhost
![Page 201: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/201.jpg)
Connecting
xcrun lldb /Volumes/KernelDebugKit/mach_kernel
■ Just invoking lldb might grab some horrible out of date monstrosity■ Avoid confusion; use xcrun
• Livekdp-remote {name or ip}
kdp-remote 10.0.1.25kdp-remote mycomputer.localkdp-remote mycomputer.mydomain.com
• Coredumpfile --core {/path/to/file}
file -c /PanicDumps/core-xnu-2050.22.13-10.0.1.25-47b8de62
![Page 202: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/202.jpg)
Miscellaneous Notes
•We’ve changed NMI• Coredumps how-to• Zone corruption boot-args• Console output and graphics
![Page 203: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/203.jpg)
We’ve Changed NMI in OS X 10.9
•With boot-args set so that debug has the 0x4 bit set, e.g.sudo nvram boot-args=”debug=0x144”
• In OS X 10.8 or earlier, NMI was Power key alone•Now it is Left-⌘ + Right-⌘ + Power
• You can revert to the old behavior by or’ing in the 0x8000 bitsudo nvram boot-args=”debug=0x8144”
![Page 204: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/204.jpg)
Automatically Save Coredumps
•Host (e.g. 10.0.40.2)sudo mkdir /PanicDumpssudo chown root:wheel /PanicDumpssudo chmod 1777 /PanicDumpssudo launchctl load -w /System/Library/LaunchDaemons/com.apple.kdumpd.plist
• Client (panicking machine)sudo nvram boot-args="debug=0xd44 _panicd_ip=10.0.40.2"sudo reboot
![Page 205: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/205.jpg)
Zone Protection and Corruption Checks
• Buffer overruns, use-after-free errors, zone-mismatched frees, and timing induced races-zc
■ zalloc code checks the free list pointers of all zones for correctness-zp
■ zfree routine overwrites freed memory with 0xdeadbeefdeadbeef■ Catches attempts to execute or access freed data
sudo nvram boot-args=”debug=0x144 -zp -zc”
![Page 206: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/206.jpg)
Guard Mode Kernel Zone Allocator
gzalloc_size=<size>
■ Target all zones with elements of <size> bytes
gzalloc_min=<size> gzalloc_max=<size>
■ Target zones with elements >= size or <= size
-gzalloc_wp
■ Write protect, rather than unmap, freed allocations ■ -gzalloc_wp requires gzalloc_size or gzalloc_min/max
![Page 207: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/207.jpg)
Performance Considerations
• -zp and -zc add additional runtime checks■ Little additional memory usage
• -gzalloc_wp gzalloc_size={size} takes much more memory■ Each allocation is a 4k page with additional guard page■ Measurably slower, but catches more bugs
![Page 208: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/208.jpg)
Console Output and Graphics
•Graphics changed to support multiple buffers ■ OS X 10.8 and later■ Draw to a buffer instead of directly to the screen ■ Enhancement for retina display machines
•Unreliable console output to the screen if you panic
![Page 209: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/209.jpg)
More Information
Paul DanboldCore OS Evangelist [email protected]
DocumentationUnderstanding and debugging kernel panicshttp://developer.apple.com/library/mac/#technotes/tn2063/_index.htmlKernel Core Dumpshttp://developer.apple.com/library/mac/#technotes/tn2004/tn2118.htmlGenerating a Non-Maskable Interrupt (NMI) http://developer.apple.com/library/mac/#qa/qa1264/_index.htmlWWDC 2012 Session 415: “Debugging with lldb”
Apple Developer Forumshttp://devforums.apple.com
![Page 210: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/210.jpg)
Related Sessions
Advanced Debugging with LLDB Pacific HeightsFriday 9:00AM
![Page 211: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/211.jpg)
Labs
OS X Kernel Lab Core OS Lab BFriday 10:15AM
OS X Kernel Lab Core OS Lab BWednesday 2:00PM
![Page 212: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/212.jpg)
Summary
• Sign your kext in OS X 10.9• lldb is faster and more powerful
■ Still have the kgmacros you know and love
•New ways of two machine debugging via Thunderbolt adapters•New boot-args to track down bugs
![Page 213: What’s New in Kext Development€¦ · Kext Development Overview •A kext is a bundle that extends the kernel Kext = Kernel Extension Only available for OS X, not iOS •Structured](https://reader034.vdocuments.site/reader034/viewer/2022050503/5f9562c16f42ad6005493e40/html5/thumbnails/213.jpg)