Visual Code Kullanarak Linux Kernel Module Programlama

Gurhan Polat
3 min readJan 31, 2020

--

Merhaba,

Visual Code, bir cogunuzun hali hazirladigi bildigi gibi, Microsoft un gelistirdigi multi platform bir IDE’dir. Bu IDE’nin en buyuk guzelligi ise asiri derece customize edilebilir olmasidir. Hali hazirda binlerce eklentisi bulunan bu arkadas, eklentilerin yetersiz kaldigi yerlerde ise size, kendi scriptlerinizi yazip yeni imkanlari saglama konusunda hic zorluk cikarmaz. Neyse reklamlari gecelim, linki paylasalim.

vscode’un bir cok extension i oldugunu soylemistik. Linux Kernel Module derlemek ve kernel header’larini kullanarak vscode tarafindan saglanan intellisense den faydalanmak icin ise bize yalnizca C/C++ extension’i yeterli. Extension tab’ina gecip arama cubuguna ms-vscode.cpptools yazmaniz ve yuklemeniz yeterli. Asagiya henuz calistirdigim ve bahsi gecen eklentiyi yukledigim vscode’un resmini atiyorum.

Evet daha fazla ilerlemeden linux kernel module derlemek icin gerekli olan paketlerin ve header larin yuklu oldugundan emin olalim.

sudo apt install build-essential && sudo apt install linux-headers-$(uname -r)

Paketlerin ve headerlarin yuklu olduguna emin olduktan sonra, vscode’u kullanarak istediginiz lokasyonda ki bir klasoru acip, (File->Open Folder)o klasoru proje klasorumuz yapabiliriz. Ben ~/Desktop/lkm klasorunu actim. Yada kisa yoldan asagidaki komutu calistirabilirsiniz.

mkdir ~/Desktop/lkm && code ~/Desktop/lkm

Daha sonra vscode’u kullanarak iki adet dosya olusturuyoruz. lkm.c (source code’muz) Makefile (derleme dosyamiz).

lkm.c dosyamiz asagidaki gibi

Makefile dosyamiz asagidaki gibi

Dosyamiz derleme islemi icin artik hazir. Ancak Code henuz intellisense i nasil calistiracagini bilmiyor. Bu konuda vscode’a yardimci olabilmek icin derleme surecini, hangi header klasorlerin derlemeye dahil oldugunu, hangi define direktiflerinin verildigini ogrenmemiz gerekiyor. Bunu yapabilmek icin vscode uzerindeki Terminal’i kullanarak

make V=1>makeout.txt

komutunu giriyoruz. Boylece make yaptigi tum isi ayrintili bir sekilde makeout.txt icine yaziyor.Bu arada Makefile icine yazdigimiz make komutunun -C parametresi mevcut dizini -C den sonra gelen dizin ile degistir demektir. Yani bizim makeout.txt icerisinde gorecegimiz her ‘.’ aslinda ‘/lib/modules/$(shell uname -r)’ e esit olacaktir, aklimizda bulunsun. (bende bu dizin ‘/lib/modules/5.3.0–29-generic/build’)

makeout.txt asagidaki gibi cokca ciktiyla birlikte geliyor.

Ancak bizim ilgilendigimiz kisim, gcc ye gecilen parametreler, hatta o parametrelerin bile bir coguyla ilgilenmiyoruz. Ilgilendigimiz parametreler -I include pathleri, -D define directiveleri ve bir de -nostdinc standart include dosyalarinin katilmamasi gerektigi

Tum bilgileri elde ettikten sonra bunlari vscode ile paylasmanin zamani geldi. Proje klasorumuze (~/Desktop/lkm) vscode u kullanarak ‘.vscode’ isminde bir klasor olusturuyor, icine de ‘c_cpp_properties.json’ isminde bir dosya olusturuyoruz.(~/Desktop/lkm/.vscode/c_cpp_properties.json) Bu dosya ilk etapta yukledigimiz C/C++ eklentisinin ayarlarinin yapildigi dosya.

c_cpp_properties.json

Ve islem tamam, artik vscode u kullanarak linux kernel module yazarken, vscode un sagladigi intellisense ten faydalanabiliriz.

Tum islem adimlarinin videosu (Video yalnizca bilgilendirme amaclidir, dosyalarin son halini bu yazidan alabilirsiniz.)

--

--