Xây dựng Linux kernel và thêm lời gọi hệ thống vào Linux kernel

Tram Ho

1. Xây dựng Linux kernel.

Đầu tiên bạn phải ở chế độ người dùng root bằng cách dùng lệnh:

(Lưu ý: Khi nhập mật khẩu sẽ không hiển thị, nhập xong nhấn enter thì ký hiệu $ sẽ chuyển sang # là bạn đã ở chế độ root user).

Bước 1: Tải tất cả công cụ cần thiết dùng lệnh:

Bước 2: Xem kernel hiện tại dùng lệnh:

Bước 3: Tải kernel 5.15 và giải nén dùng lệnh (tốc độ mạng càng cao thì tải càng nhanh):

Sau khi giải nén bạn di chuyển đến thư mục linux-15.5 bằng lệnh:

Bước 4: Chạy lệnh

Tại đây bạn không nên thay đổi gì hết, chọn save và exit (hoặc nhấn esc 2 lần) . Nếu gặp lỗi do màn hình terminal của bạn quá nhỏ không thể mở menuconfig thì phải resize, kéo màn hình đủ 80 dòng 19 cột.

menuconfig

Bước 5: Biên dịch kernel, chạy lệnh:

Nếu gặp lỗi No rule to make target ‘debian/canonical-certs.pem thì chạy hai lệnh sau:

Hai lệnh trên sẽ không có output, khi chạy make -j4 cứ ấn enter để đồng ý và sẽ mất 1 đến 3 tiếng để biên dịch.

make-j4

make-j4

Bước 6: Cài đặt kernel modules và cài đặt kernel, dùng lệnh:

Nếu gặp lỗi ở bước này thường là do gặp lỗi khi chạy make -j4, hãy kiểm tra kỹ, sửa lỗi và chạy lại make -j4 lại.

Bước 7: Cập nhật lại cấu hình grub:

Bước 8: Reboot lại máy (chạy lệnh reboot). Sau khi khởi động máy dùng lệnh uname-r để kiểm tra kernel vừa xây dựng có thành công hay không.

successful

Nếu thất bại hãy xóa thư mục linux-5.15, giải nén và làm lại từ bước 4 hoặc nếu bạn sử dụng máy ảo bạn có thể xóa máy ảo, tạo máy mới và làm lại từ đầu. Đừng nản nhé, làm lại nhiều lần và gặp lỗi sẽ giúp bạn thông thạo, biết thêm nhiều kiến thức trong quá trình sửa lỗi. Chúc bạn thành công nhé!

2. Thêm lời gọi hệ thống vào Linux kernel

Có nhiều công cụ soạn thảo như vim, nano, gedit,… và mình thích sử dụng gedit còn bạn thích sử dụng công cụ nào thì cứ sử dụng công cụ đó nhé.

Đảm bảo bạn đang ở chế độ root user và ở tại thư mục linux-5.15.

Bước 1: Dùng lệnh

Tạo chương trình sau:

Bước 2: Dùng lệnh

Thêm hello.o vào như hình sau (nhớ xuống dòng, nếu bạn muốn thêm nhiều lời gọi khác thì hello.o name1.o name2.o ….):

Makefile

Bước 3: Dùng lệnh

Thêm dòng asmlinkage long sys_helloworld(void) vào cuối file trước endif như sau:

syscalls.h

Bước 4: Dùng lệnh

Thêm dòng 449 như hình:

syscall_64.tbl

Bước 5: Thực hiện biên dịch kernel (kiểm tra kỹ xem có lỗi chính tả ở các bước trên không rồi hẳn biên dịch nhé ): make -j4, make modules_install, make install (như phần 1).

Bước 6: Tạo một chương trình C tên loigoi.c tại thư mục cá nhân (cd ~) để biết lời gọi thành công hay không. Dùng lệnh:

Chương trình:

Bước 7: Biên dịch và chạy chương trình C. Dùng lệnh

Lúc màn hình sẽ hiện “Successful” là lời gọi đã cài đặt thành công, còn nếu không thì sẽ hiện “Unsuccessful”

Bước 8: Tại thư mục cá nhân, thực hiện gọi lời gọi dùng lệnh:

successful

Kéo xuống dưới cùng sẽ hiện ra lời gọi bạn đã cài đặt. Vậy là hoàn thành rồi!

Mình đã trình bày tất cả các bước mình thực hiện với kernel version 5 nếu bạn thực hiện với kernel mới version 6 mình không chắc các bước có giống nhau không. Bên cạnh đó, trong quá trình thực hiện có thể bạn sẽ gặp những lỗi mình không đề cập đến, bạn hãy copy dòng thông báo lỗi đó và tìm kiếm trên google, có nhiều trang web như stackoverflow, askubuntu,… sẽ giúp bạn đưa ra gợi ý giải quyết vấn đề.

Mình chỉ là một noob đang học về linux, mình chỉ chia sẻ cách mình đã thành công xây dựng kernel và cài đặt system call nên mình không hiểu sâu và đủ kiến thức để giải thích cho bạn từng bước.

Mong bài viết này sẽ hữu ích với bạn!

Tài liệu tham khảo:

https://phoenixnap.com/kb/build-linux-kernel

https://dev.to/jasper/adding-a-system-call-to-the-linux-kernel-5-8-1-in-ubuntu-20-04-lts-2ga8

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo