Sparse, Linux çekirdeğine katkı verirken kullanılabilen araçlardan biri. Linus Torvalds tarafından yazılmış statik kod denetleyicisi ve bir süredir de bakımını Josh Tripplett yapıyordu.
Normalde çekirdek derlemesi yaparken almadığımız hataları/uyarıları Sparse'ı etkinleştirerek alabiliriz. Peki Sparse bize ne tür hatalar döndürüyor? Makro kullanımlarındaki yanlışlıklar, tip dönüşüm hataları, static & extern gibi anahtar kelimelerin kullanımlarında yanlışlık varsa ya da bir fonksiyon üretildiği ve hiç kullanılmadığı durumlarda uyarı veriyor.
Kurulum için sparse paketini kurmak yeterli ya da depodan çekerek de kurabiliriz. Temel kullanımı ise şu şekilde: make C=2 drivers/staging/wlan-ng/
Sparse'ı kullanabilmek için çekirdek hakkındaki en temel veri tiplerini, makrolarını bilmek gerekiyor. Eğer static, extern ifadelerindeki kullanımları düzeltmek gerekiyorsa o fonksiyonların nerelerde çağrıldığına, hangi başlık dosyasında tanımlandığına bakıp düzeltme yapmak gerekiyor. Ben sparse'ı ilk kullanmaya başladığımda bu yazıyı okumuştum, zaten okumamla birlikte oldu o zaman, beni evden beklerler demem bir olmuştu :). Sparse ile katkı vermeye başladığımda da artık beni evden beklemiyorlar demeyi unutmadım tabi ^_^.
Sparse kullanırken veri gösterimlerindeki hataları da alabiliriz. Eğer driver Makefile dosyasında endian kontrolleri etkinleştirilmediyse, sparse kullanırken make C=2 CF="-D__CHECK_ENDIAN__" drivers/staging/wlan-ng/ şeklinde bayrağı aktif etmeliyiz.
Verileri big endian ya da little endian şeklinde göstermek tasarımcıya göre değişen bir şey. Veri biçminde anlaşabilmek için işlemcinin kullandığı yerel biçimden driverın kullandığı biçime dönüş yapmak gerekebiliyor. Bunun için cpu_to_le16(), ya da le16_to_cpu() fonksiyonları var. Bu fonksiyonlar little endian 16 bit olan veriler için. Veri gösterimiyle ilgili fonksiyonlara buradan ulaşabilirsiniz. Birde burada örnek var, gayet yararlı olduğunu düşünüyorum :). Burada temel problem fonksiyonların aldığı değişkenler ya da atama işlemlerinde meydana gelen tip uyumsuzlukları. Bu gibi durumlarda değişkenin tipini değiştirmek ya da dönüştürme işlemini kaldırmak gerekiyor. Ya da driverın özelliklerinden ve kodu inceleyerek, veri aktarımı olurken hangi biçime dönüştürülmesi gerektiğini anlayabiliriz. Ağlarla ilgili olan driverlarda big endian gösteriminin kullanılması gibi.
Teşekkürler.
YanıtlaSil