Sau khi lập trình dirver, cơng việc tiếp theo là biên dịch driver biến tập tin mã nguồn C thành tập tin ngôn ngữ máy driver trước khi cài đặt vào hệ điều hành. Sau đây là các bước biên dịch driver.
Biên dịch driver có 2 dạng, đầu tiên biên dịch driver khi tập tin mã nguồn driver thuộc một bộ phận trong cấu trúc mã nguồn mở của kernel, khi đó driver được biên dịch cùng lúc với kernel, cách này chỉ áp dụng khi driver đã hoạt động ổn định, hơn nữa chúng ta không cần cài đặt lại driverkhi khởi động lại hệ thống. Phương pháp thứ hai là biên dịch driver khi nó nằm ngoải cấu trúc mã nguồn mở của kernel, driver có thể được biên dịch trong khi kernelđang chạy, ưu điểm của phương pháp này là thời gian thực hiện nhanh, thích hợp cho việc thử nghiệm driver mới, thế nhưng mỗi lần hệ thống khởi động lại, driver sẽ bị mất do đó phải cài đặt lại khi khởi động. Khi driver đã hoạt động ổn định chúng ta mới biên dịch driver theo cách 1.
Biên dịch driver hoàn toàn khác với biên dịch chương trình ứng dụng. Chương trình ứng dụng có những thư viện chuẩn trong hệ thống linux, nên khi biên dịch ta chỉ việc
chép tập tin chương trình vào trong một thư mục bất kỳ trong cấu trúc root file system và gọi lệnh biên dịch. Nhưng đối với driver, những thư viện sử dụng không nằm sẵn trong hệ thống, mà nằm trong cấu trúc mã nguồn mở của kernel. Vì thế trước khi biên dịch driver chúng ta phải giải nén tập tin mã nguồn mở của kernel vào cấu trúc root file system. Sau đó tạo tập tin Makefileđể dùng lệnh maketrong shell biên dịch driver. Cấu trúc Makefile đã được hướng dẫn kỹ trong phần lập trình hệ thống nhúng căn bản. Trong phần này chúng ta chỉ tạo ra Makefile với nội dung cần thiết để có thể biên dịch được
driver.
1. Chép tập tin driver mã nguồn C vào thư mục nào đó trong cấu trúc root file
system.
2. Tạo tập tin có tên Makefilenằm trong cùng thư mục với tập tin drivermã nguồn C. Tập tin Makefilecó nội dung như sau:
/*Thơng báo cho trình biên dịch biết loại chip mà driver sẽ cài đặt*/
export ARCH=arm
/*Khai báo chương trình biên chéo là những tập tin có tên đầu tiên là arm- none-linux-gnueabi-...*/
export CROSS_COMPILE=arm-none-linux-gnueabi-
/*Tại đây tập tin mã nguồn driver sẽ được biên dịch thành tập tin .ko, có thể cài đặt vào linux*/
obj-m += <tên tập tin driver mã nguồn C>.o
/*Tùy chọn all, thực hiện chuyển đến cấu trúc mã nguồn mở của kernel, tại đây driver sẽ được biên dịch thông qua lệnh modules */
all:
make –C <đường dẫn đến thư mục chứa cấu trúc mã nguồn mở của kernel> M=$(PWD) modules
/*Tùy chọn clean, thực hiện chuyển đến cấu trúc mã nguồn mở của kernel, thực hiện xóa những tập tin .o, .ko được tạo thành trong lần biên dịch trước*/
clean:
make -C / đường dẫn đến thư mục chứa cấu trúc mã nguồn mở của kernel> M=$(PWD) clean
3. Tại thư mục chứa mã nguồn driver, dùng lệnh shell: make clean all Lúc này hệ thống linux sẽ xóa những tập tin có đi .o, .ko, ... tạo thành trong những lần biên dịch trước.Tiếp theo, biên dịch tập tin mã nguồn driver thành tập tin .ko, tập tin này có thể được cài dặt vào hệ thống linux thông qua những thao tác sẽ được hướng dẫn trong phần sau.