Synopsis
kextutil [options] [--] [kext] ...
Deprecated
kextutil yardımcı aracı kullanımdan kaldırılmıştır. Lütfen kmutil(8) eşdeğerlerini kullanın: kmutil load veya kmutil print-diagnostics.
Description
kextutil programı, çekirdek uzantılarını (kexts) açıkça yüklemek, kext'lerdeki sorunları teşhis etmek ve kext'lerde hata ayıklamak (debug) için sembol dosyaları oluşturmak amacıyla kullanılır. Bir kext'i çekirdeğe yüklemek için kextutil'in süper kullanıcı (root) olarak çalıştırılması gerekir; diğer tüm kullanımlar için herhangi bir kullanıcı olarak çalıştırılabilir.
kextutil, Darwin işletim sisteminde ve macOS'ta kext yüklemek için kullanılan geliştirici yardımcı aracıdır. Yazılımlar ve yükleyiciler bu program yerine kextload(8) kullanmalıdır.
Mevcut argümanlar ve seçenekler şunlardır:
kext Yüklenecek veya başka bir şekilde kullanılacak kext paketinin yol adı. Kext'ler, -bundle-id seçeneğiyle CFBundleIdentifier bilgisine göre de belirtilebilir.
-a identifier@address, -address identifier@address Sembol dosyaları oluşturulurken ve yükleme yapılmazken, CFBundleIdentifier değeri identifier olan kext'i address adresinde yüklüymüş gibi değerlendirin. Sembol oluştururken, belirtilmemiş adreslere sahip tüm bağımlılıklar atlanır. Sembollerini istediğiniz her çekirdek dışı bağımlılığı belirtmek için bu seçeneği arka arkaya kullanın. Bu seçenek, -no-load seçeneğinin kullanılmasını gerektirir. Ayrıca -use-load-addresses ve -no-load seçeneklerine bakın.
-arch: Sembol oluşturmak ve testleri gerçekleştirmek için belirtilen mimariyi kullanın. Çekirdeğe yükleme yapılıyorsa veya çekirdekten yükleme adresleri alınıyorsa, belirtilen mimari çalışan çekirdeğinkiyle eşleşmelidir.
-A, -use-load-addresses Sembol dosyaları oluşturulurken ve yükleme yapılmazken, çalışan çekirdekteki tüm bağımlılık kext adreslerini arayın. Bu seçenek, -no-load seçeneğinin kullanılmasını gerektirir. Ayrıca -address ve -no-load seçeneklerine bakın.
-b identifier, -bundle-id identifier Bilinen kext'ler kümesinde CFBundleIdentifier değeri identifier olan kext'i arayın ve yükleyin. Verilen tanımlayıcıya sahip en yüksek CFBundleVersion değerine sahip kext kullanılır; sürüm eşitliği durumunda, komut satırında belirtilen en son kext kullanılır. Daha fazla bilgi için -dependency, -no-system-extensions ve -repository seçeneklerine bakın.
-c, -no-caches Tüm depo önbellek dosyalarını yoksayın ve bilgi toplamak için tüm kext paketlerini tarayın. Bu seçenek belirtilmezse, kextutil önbellek dosyalarını kullanmaya çalışır ve (root olarak çalışırken) güncel değillerse veya mevcut değillerse onları oluşturmaya çalışır.
-d kext, -dependency kext Bağımlılıkları çözmek için kext'i ve eklentilerini bilinen kext'ler kümesine ekleyin. Bu seçenek, bir dizinden tek bir kext eklemek için yararlıdır. Daha fazla bilgi için “Açıkça Bağımlılık Belirtme” bölümünün yanı sıra -no-system-extensions ve -repository seçeneklerine bakın.
-e, -no-system-extensions /System/Library/Extensions/ veya /Library/Extensions/ içeriklerini varsayılan kext deposu olarak kullanmayın. Bu seçeneği kullanırsanız, -dependency ve -repository seçeneklerini kullanarak yüklenen veya üzerinde çalışılan kext'in tüm bağımlılıklarını açıkça belirtmeniz gerekir. Daha fazla bilgi için “Açıkça Bağımlılık Belirtme” bölümüne bakın.
-h, -help Her bir seçenek bayrağını açıklayan bir yardım mesajı yazdırır ve komut satırındaki diğer seçeneklerden bağımsız olarak başarı sonucuyla çıkar.
-i, -interactive Etkileşimli mod; belirtilen her kext yüklendikten sonra duraklar ve kext'i başlatmak ile kimliklerini (personalities) çekirdeğe göndermek için kullanıcı girişini bekler. Bu seçenek, kext'in çalışmasının en erken aşamalarında hata ayıklanması gerektiğinde hata ayıklayıcı (debugger) kurulumuna olanak tanır.
-I, -interactive-all Belirtilen her kext ve tüm bağımlılıkları için yukarıda açıklanan etkileşimli mod.
-k kernel_file, -kernel kernel_file Verilen kernel_file dosyasına karşı bağlayın. Hata ayıklama sembolleri oluşturmak için yalnızca -no-load seçeneğiyle birlikte izin verilir. Varsayılan olarak kextutil, bağlantı sembollerini /System/Library/Kernels/kernel konumundaki çekirdekten almaya çalışır.
-l, -load-only Yalnızca kext'i yükleyin ve başlatın; eşleştirmeyi (matching) başlatmak için I/O Kit kimliklerini (personalities) çekirdeğe göndermeyin. Eşleştirme, daha önceki bir yükleme işleminden kalan kimlikler mevcutsa yine de gerçekleşebilir. Bu seçenekle bir kext yüklemeden önce kextunload(8) kullanmak isteyebilirsiniz.
-m, -match-only Kext'i yüklemeyin, ancak eşleştirmeyi başlatmak için kimliklerini çekirdeğe gönderin. Bir sürücüyü -load-only ile yükledikten ve hata ayıklayıcıyı kurduktan sonra bu seçeneği kullanın.
-n, -no-load Kext'i yüklemeyin ve kimliklerini çekirdeğe göndermeyin. Bu seçenek, yalnızca -symbols seçeneğiyle hata ayıklama sembolleri oluştururken veya -print-diagnostics seçeneğiyle kext'leri teşhis ederken kullanılır. Geliştirme kolaylığı açısından bu seçenek, -no-authentication seçeneğini gerektirir. Ayrıca -address ve -use-load-addresses seçeneklerine bakın.
-p personality, -personality personality Kext'ten yalnızca adı geçen kimlikleri çekirdeğe gönderin. İstenen her kimlik için tekrarlayın veya kextutil'in her bir kimliği sorması için -interactive seçeneğini kullanın.
-q, -quiet Sessiz mod; bilgilendirici veya hata mesajı yazdırmaz. Eğer kextutil, -interactive ve -interactive-all seçeneklerinde olduğu gibi kullanıcı etkileşimi gerektirebilecek bir şekilde ve -no-load seçeneğinin bazı kullanımlarında -quiet ile çalıştırılırsa, program sessizce hata durumuyla çıkar.
-r directory, -repository directory Uzantıları içeren directory dizinini bir kext deposu olarak kullanın. Bu seçenek, bağımlılıkları çözmek veya -bundle-id seçeneğini kullanırken CFBundleIdentifier ile arama yapmak için bilinen kext'ler kümesine ekleme yapar. Bu işlem özyinelemeli (recursive) değildir; yalnızca dizinin doğrudan içeriği (ve bunların eklentileri) taranır. Daha fazla bilgi için “Açıkça Bağımlılık Belirtme” bölümünün yanı sıra -dependency ve -no-system-extensions seçeneklerine bakın.
-s directory, -symbols directory Oluşturulan tüm sembol dosyalarını directory dizinine yazın. Dizin zaten mevcut olmalıdır. Sembol dosyaları, her bir kext'in CFBundleIdentifier değerine göre ve sonuna .sym uzantısı eklenerek adlandırılır.
-t, -print-diagnostics Bazı testleri örtük olarak devre dışı bırakan seçeneklerle bile olsa, belirtilen kext'ler üzerinde olası tüm testleri gerçekleştirin ve kext'in yüklenebilir olup olmadığını, yüklenemiyorsa ne gibi sorunları olduğunu belirtin. Testlerin doğrulama (validation), kimlik doğrulama (authentication) ve bağımlılık çözme (dependency resolution) olmak üzere üç aşamada gerçekleştirildiğini unutmayın; herhangi bir aşamadaki başarısızlık, sonraki aşamalardaki testleri imkansız hale getirebilir. Bu nedenle, doğrulama hatası olan bir kext'in rapor edilmemiş kimlik doğrulama sorunları veya eksik bağımlılıkları olabilir. Ayrıca, bazı testlerin root olarak çalıştırılması gerekir.
-v [0-6 | 0x####], -verbose [0-6 | 0x####] Ayrıntılı mod; program çalışması hakkında bilgi yazdırır. Daha yüksek ayrıntı seviyeleri, tüm düşük seviyeleri içerir. Varsayılan olarak kextutil yalnızca uyarıları ve hataları yazdırır. 0-6 arasında bir seviye veya (kext_logging(8) içinde açıklandığı gibi) onaltılık bir günlük belirtimi belirtebilirsiniz. Ayrıntılı çıktı seviyeleri şunlardır:
0 Yalnızca hataları yazdırır (yani uyarıları gizler); ayrıca -quiet seçeneğine bakın.
1 (veya yok) Program çalışması hakkında temel bilgileri yazdırır.
2 Bağlantı/yükleme (link/load) işlemi hakkında temel bilgileri yazdırır.
3 Kullanıcı-çekirdek etkileşimi, bağlantı/yükleme işlemi ve I/O Kit Kimliklerinin (Personalities) işlenmesi hakkında daha fazla bilgi yazdırır.
4 Modül başlatma ve C++ sınıf yapısı (class construction) hakkında ayrıntılı bilgi yazdırır.
5 Yüklü kext'lerin kontrolleri dahil olmak üzere dahili hata ayıklama (debug) bilgilerini yazdırır.
6 Seviye 5 ile aynıdır ancak program tarafından okunan tüm kext'ler içindir.
Kext'lerin hata ayıklama yüklemesini kolaylaştırmak amacıyla, kextutil'deki 1-6 ayrıntılı seviyeleri, komut satırında belirtilen her kext için OSBundleEnableKextLogging özelliğini örtük olarak true olarak ayarlar. Ayrıntılı günlük kaydı hakkında daha fazla bilgi için kext_logging(8) kılavuzuna bakın.
-x, -safe-boot kextutil'i güvenli modda (Shift tuşu basılı tutularak yapılan başlatmayı belirtektip) çalıştırın. OSBundleRequired bilgi sözlüğü özelliği için uygun bir değer belirtmeyen kext'ler yüklenmeyecektir. Bu seçenek, -no-caches seçeneğinin kullanılmasını gerektirir.
Eğer sistem gerçekten güvenli modda başlatılmışsa, bu seçenek gereksizdir. Güvenli modda çalışan bir sistem için güvenli olmayan başlatma modunu simüle etmenin bir yolu yoktur.
-z, -no-authentication Kext'lerin kimliğini doğrulamayın. Bu seçenek geliştirme sırasında kolaylık sağlamak içindir ve yalnızca bir kext'i çekirdeğe fiilen yüklemeyen işlemler için (sembol oluşturma gibi) izin verilir.
-Z, -no-resolve-dependencies Bağımlılıkları çözmeye çalışmayın. Bu seçeneğe yalnızca bir kext'i sorunlara karşı test etmek amacıyla -no-load ve -print-diagnostics seçenekleri kullanıldığında izin verilir. Sembol oluşturma bağımlılıkların çözülmesini gerektirdiğinden, -symbols seçeneğiyle birlikte kullanılmasına izin verilmez.
--: Tüm seçeneklerin sonu. Yalnızca kext adları takip eder.
Examples
İşte kextutil için yaygın kullanımlar ve kullanım kalıpları.
Temel Yükleme (Basic Loading)
Bir kext yüklemek için kextutil'i süper kullanıcı (root) olarak çalıştırmalı ve bir kext paket adı belirtmelisiniz; hiçbir seçenek gerekmez:
kextutil TabletDriver.kext
Alternatif olarak, bir kext'i CFBundleIdentifier değerine göre belirtmek için -bundle-id (-b) seçeneğini kullanabilirsiniz:
kextutil -b com.mycompany.driver.TabletDriver
Ek seçenekler olmadan kextutil, verilen CFBundleIdentifier değerine sahip bir kext için /System/Library/Extensions/ ve /Library/Extensions/ dizinlerine bakar. -repository (-r) seçeneğiyle depo dizinleri veya -dependency (-d) seçeneğiyle tek tek kext'lerin eklenmesi, kextutil'in arama yaptığı kext kümesini genişletir:
kextutil -r ${USER}/Library/Extensions TabletDriver.kext
Kext'leri Teşhis Etme (Diagnosing Kexts)
kextutil varsayılan olarak kext'ler hakkında teşhis bilgilerini yazdırır, ancak bazı seçenekler belirli testlerin atlanmasına neden olur. Tüm testlerin gerçekleştirildiğinden emin olmak için -print-diagnostics (-t) seçeneğini kullanın.
-print-diagnostics seçeneği, bir sorunu tam olarak tespit etmek amacıyla genellikle bir yükleme hatasından sonra -no-load (-n) seçeneğiyle birlikte kullanılır. Ancak başka herhangi bir seçenek kümesiyle de kullanılabilir.
Bağımlılıkların mevcut olmayabileceği bir derleme ortamında olduğu gibi bir kext'i tek başına doğrulamak istiyorsanız, /System/Library/Extensions/ ve /Library/Extensions/ depolarını devre dışı bırakmak ve bağımlılık çözümlemesini engellemek için sırasıyla -no-system-extensions (-e) ve -no-resolve-dependencies (-Z) seçeneklerini kullanabilirsiniz:
kextutil -entZ PacketSniffer.kext
Yalnızca doğrulama (validation) ve kimlik doğrulama (authentication) kontrolleri gerçekleştirilir.
Yükleme Sırasında Hata Ayıklama Sembolleri Oluşturma (Generating Debug Symbols When Loading)
Bir kext yüklenirken gdb ile kullanılmak üzere bir sembol dosyası oluşturmak için, yüklenen kext ve tüm bağımlılıkları için sembol dosyalarının yazılacağı dizini belirtmek üzere -symbols (-s) seçeneğini kullanın.
kextutil -s ~/ksyms PacketSniffer.kext
Zaten Yüklü Bir Kext İçin Hata Ayıklama Sembolleri Oluşturma (Generating Debug Symbols For an Already-Loaded Kext)
Aynı sistemde veya başka bir sistemde zaten yüklü olan bir kext için semboller oluşturmak istiyorsanız, -no-load (-n) seçeneyle birlikte -symbols (-s) seçeneğini kullanın. Ancak bu durumda kext ve tüm bağımlılıkları için adreslerin bilinmesi gerektiğinden bunları belirtmelisiniz. Bunları komut satırında belirtmezseniz, kextutil gereken her kext'in yükleme adresini sorar. Bu adresleri almak için sembollerini oluşturduğunuz makinede kextstat(8) komutunu, Kernel Development Kit'teki kgmacros dosyası tarafından tanımlanan showallkmods gdb(1) makrosunu kullanabilir veya bir panik izleme (panic backtrace) çıktısına başvurabilirsiniz.
kextutil -n -s ~/ksyms GrobbleEthernet.kext
enter the hexadecimal load addresses for these modules:
com.apple.iokit.IONetworkingFamily: 0x1001000
...
Alternatif olarak, tüm kext'lerin CFBundleIdentifiers değerlerini biliyorsanız, her kext için -address (-a) seçeneğini kullanabilirsiniz (–address seçeneğini kullanırken –no-load belirtmeniz gerekmez):
kextutil -s ~/ksyms \
-a com.apple.iokit.IONetworkingFamily@0x1001000 \
-a com.apple.iokit.IOPCIFamily@0x1004000 \
-a com.mycompany.driver.GrobbleEthernet@0x1007000 \
GrobbleEthernet.kext
Bununla birlikte, yüklü kext ile aynı makinede kextutil çalıştırabiliyorsanız en basit yol, tüm yüklü kext'leri çekirdekten kontrol eden ve yükleme adreslerini otomatik olarak alan -use-load-addresses (-A) seçeneğini kullanmaktır.
kextutil -s ~/ksyms -A GrobbleEthernet.kext
Açıkça Bağımlılık Belirtme (Explicitly Specifying Dependencies)
kextutil bağımlılıkları otomatik olarak çözdüğü için, istediğinizden farklı bir kext bağımlılık olarak kullanılabilir (aynı sürümün birden fazla kopyası olduğunda veya zaten /System/Library/Extensions/ dizininde bulunan bir kext'in farklı bir sürümüyle çalışıyorsanız). Varsayılan olarak, bir kext'i çekirdeğe yüklerken kextutil, başarılı bir yükleme sağlamak amacıyla olası bağımlılıkların hangi sürümlerinin zaten yüklü olduğunu kontrol eder. Ancak yükleme yapılmadığında ve -use-load-addresses kullanılmadığında, her zaman bağımlılıkların en yüksek sürümlerini seçer ve eşitlik durumunda, komut satırında -dependency veya -repository seçenekleri kullanılarak belirtilen kext'ler arasından veya komut satırı argümanları olarak (azalan öncelik sırasına göre) seçim yapar.
Bağımlılıkları çözmek için kullanılan uzantı kümesi üzerinde hassas kontrol sağlamak amacıyla, -dependency (-d) ve -repository (-r) seçenekleriyle birlikte -no-system-extensions (-e) seçeneğini kullanın. -no-system-extensions seçeneği standart /System/Library/Extensions/ ve /Library/Extensions/ dizinlerini hariç tutarak, bağımlılık çözümü için aday uzantı kümesini tamamen size bırakır. Aday bağımlılıkları belirtmek için, tek bir kext'i aday olarak adlandıran -dependency (-d) seçeneğini ya da tüm bir uzantı dizinini ekleyen -repository (-r) seçeneğini kullanırsınız.
kextutil -n -s ~/ksyms -e \
-d /System/Library/Extensions/System.kext \
-r ~/TestKexts -d JoystickSupport.kext JoystickDriver.kext
Ayrıca, -no-system-extensions (-e) seçeneğini kullanırsanız çekirdek hakkında bilgi sağlamak için System.kext'in en azından bir sürümünü sağlamanız gerektiğini unutmayın. Bu, her zaman bağlandığınız çekirdekle eşleşmelidir; bu da varsayılan olarak kextutil'i kullandığınız makinede yüklü olan çekirdektir; farklı bir çekirdek dosyası belirtmek için -kernel (-k) seçeneğini kullanabilirsiniz. Diğer kitaplık veya aile kext'lerini de açıkça belirtmeniz gerekebilir.
Bir I/O Kit Sürücüsünde Hata Ayıklayarak Yükleme (Debug Loading an I/O Kit Driver)
Saf I/O Kit sürücü kext'leri boş modül başlatma (module-start) rutinlerine sahiptir, ancak yüklendiklerinde eşleştirmeyi (matching) ve sürücü örneği oluşturulmasını tetiklerler. Bir I/O Kit sürücüsünün erken başlangıç kodunda hata ayıklamanız gerekiyorsa, -load-only (-l) seçeneğini kullanarak eşleştirmeyi başlatmadan sürücüyü hedef makineye yükleyebilirsiniz:
kextutil -l DiskController.kext
Bunu yaptıktan sonra, kesme noktaları (breakpoints) ayarlamak için hata ayıklama oturumunuzda oluşturulan sembol dosyasını kullanabilir ve ardından hedef makinede kextutil'i -match-only (-m) seçeneğiyle tekrar çalıştırarak eşleştirmeyi tetikleyebilirsiniz:
kextutil -m DiskController.kext
Seçilen kimlikleri çekirdeğe göndermek için -personality (-p) seçeneğini de kullanmak isteyebilirsiniz. Alternatif olarak, tüm süreç için kextutil'in herhangi bir kimliği yüklemeden hemen önce duraklamasını ve ardından her bir kimlik için bunun çekirdeğe gönderilip gönderilmeyeceğini size sormasını sağlayan -interactive (-i) seçeneğini kullanabilirsiniz:
kextutil -i DiskController.kext
DiskController.kext yüklenebilir görünüyor (disk üzerindeki kitaplıklar için bağlantı dahil değildir).
DiskController.kext ve bağımlılıklarını çekirdeğe yükle [Y/n]? y
DiskController.kext yükleniyor.
DiskController.kext başarıyla yüklendi (veya zaten yüklü).
DiskController.kext ve bağımlılıkları yüklendi,
ancak başlatılmadı (zaten çalışmıyorlarsa).
Artık onları başlatmadan önce hata ayıklayıcıda kesme noktaları ayarlayabilirsiniz.
DiskController.kext başlatılsın mı [Y/n]? y
DiskController.kext başlatıldı.
DiskController.kext için kimlikler gönderilsin mi [Y/n]? y
Test Match Personality kimliği gönderilsin mi [Y/n]? y
Modül Başlatma Rutini Olan Bir Kext'i Hata Ayıklayarak Yükleme (Debug Loading a Kext with a Module-Start Routine)
Bir kext'in modül başlatma (module-start) rutininde hata ayıklamak için, yüklemeden sonra ve modül başlatma işlevini çağırmadan önce duraklayan -interactive (-i) veya -interactive-all (-I) seçeneğini kullanmalısınız; böylece devam etmeden önce hata ayıklama oturumunuzu gerektiği gibi kurabilirsiniz.
Files
/System/Library/Extensions/ Çekirdek uzantılarının standart sistem deposu. /Library/Extensions/ Apple ürünü olmayan çekirdek uzantılarının standart deposu. /System/Library/Caches/com.apple.kext.caches/* Mac OS X 10.6 (Snow Leopard) sistemi için tüm kext önbelleklerini içerir: önceden bağlanmış çekirdek (prelinked kernel), mkext ve sistem kext bilgi önbellekleri. /System/Library/Kernels/kernel Varsayılan çekirdek dosyası.
Diagnostics
kextutil başarı durumunda sıfır durumuyla çıkar. Başarısızlık durumunda bir hata mesajı yazdırır ve mümkünse kalan kext'leri işlemeye devam eder, ardından sıfır olmayan bir durumla çıkar.
Bir kext'in yüklenebilir olması için geçerli, kimliği doğrulanmış olması ve tüm bağımlılıklarının karşılanmış olması (yani tüm bağımlılıklarının bulunmuş ve yüklenebilir olması) gerekir. Geçerli bir kext; düzgün biçimlendirilmiş bir pakete, bilgi sözlüğüne ve yürütülebilir dosyaya sahiptir. Kimliği doğrulanmış bir kext'in bileşen dosyaları root:wheel kullanıcısına aittir ve grup ile diğerleri tarafından yazılamaz izinlere sahiptir. Kext'iniz yüklenemezse, doğrulama ve kimlik doğrulamayla ilgili teşhisleri yazdırmak için -print-diagnostics (-t) seçeneğini kullanmayı deneyin.
Bugs
Pek çok tek harfli seçenek, diğer kext araçlarındaki aynı harfli seçeneklerle anlam olarak tutarsızdır (veya doğrudan çelişmektedir).
See Also
kmutil(8), kernelmanagerd(8), kextcache(8), kextd(8), kextload(8), kextstat(8), kextunload(8), kext_logging(8)
Darwin November 14, 2012 Darwin