You are on page 1of 5

Hướng dẫn thiết lập hệ thống để chạy linux – kernel – labs

1. Thiết lập hệ thống và máy ảo, lấy khung code từ github.

Trên trang nguồn (Linux Kernel Teaching — The Linux Kernel documentation (linux-kernel-
labs.github.io)), chúng ta có thể thấy phần học liệu được chia làm hai phần, là phần lectures (bài giảng)
và phần labs (bài thực hành).

Trong cả phần bài giảng lẫn phần thực hành đều có code, thế nhưng sẽ có sự khác biệt:

- Phần bài giảng sẽ có code dưới dạng demonstrative and didactic (mang tính minh họa, dùng
trong giảng dạy) và minimally reproducible (đoạn code ngắn nhất có thể tái tạo), tức để chạy
được code này người lập trình bắt buộc phải có sẵn các thành phần khác, và thường cần phải
chỉnh sửa rất nhiều để có thể chạy được.
- Phần thực hành sẽ có code dưới dạng hands-on exercise (code sẽ được cung cấp dưới dạng một
khung xương trống, tức chỉ có nguyên hàm và hướng dẫn dưới dạng comment, còn học viên bắt
buộc phải theo chỉ dẫn để implement các hàm đó).

Phần này của bài báo cáo sẽ hướng dẫn cách thiết lập môi trường và cài đặt các dependencies để hoàn
thành được các bài thực hành.

Trước hết, chúng ta sẽ thống nhất về phiên bản hệ điều hành Linux chúng ta cần sử dụng. Trong khuôn
khổ bài thực hành này, các bạn được khuyên dùng Ubuntu phiên bản 32 bit. Các bạn có thể sử dụng
phiên bản 64 bit, thế nhưng các bạn sẽ cần phải đối mặt với lỗi không tương thích. Lỗi này có thể được
giải quyết thông qua việc cài các thư viện 32-bit để giải quyết, thế nhưng lượng thời gian bỏ ra để vá các
lỗi này là rất lớn. Để tiết kiệm thời gian và công sức, xin hãy sử dụng phiên bản 32 bit.
Ảnh minh họa: lỗi không tương thích với các thư viện 32 bit

Bài báo cáo này sử dụng phiên bản Ubuntu 16.04, phiên bản 32 bit (i386).

Tiếp theo, sau khi cài đặt hệ điều hành, ta cần lấy phần khung xương của các bài thực hành. Khung
xương này bao gồm:

- Kernel Linux được fork từ Torvalds/Linux


- Máy ảo Qemu
- Phần khung của các bài thực hành (được lưu trữ trong tools/labs)
- Các Makefile và Kbuild tương ứng.

Để lấy được phần khung xương này, trước hết cần cài đặt git:

sudo apt-get install git

git clone https://github.com/linux-kernel-labs/linux-kernel-labs.github.io.git

2. Đảm bảo các dependencies cho máy:

Qemu cần những package sau để chạy:

 flex
 bison
 build-essential
 gcc-multilib
 libncurses5-dev
 qemu-system-x86
 qemu-system-arm
 python3
 minicom
 kvm
Để cài các phần mềm này một cách nhanh chóng, học viên có thể viết script và chạy file script để cài đặt.

Sau đó, ta cần cài đặt các package sau để có thể lập trình:

sudo apt install --reinstall build-essential

sudo apt install --reinstall dkms

sudo apt install --reinstall linux-generic

sudo apt install --reinstall linux-signed-generic

sudo apt install --reinstall linux-headers-$(uname -r)

Kiểm tra xem có đủ các file autoconf.h:

sudo cp /usr/src/linux-headers-$(uname -r)/include/generated/autoconf.h /usr/src/linux-headers-$


(uname -r)/include/generated/

Thêm path:

export LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu

Nếu sử dụng hệ điều hành 64-bit, cần cài tiếp các packages sau (nếu cần thiết, học viên có thể chạy đoạn
code này trên hệ điều hành 32-bit, nhưng rất có thể đã có sẵn):

sudo apt-get install lib32z1

sudo apt-get install libgtk2.0-0:i386 libidn11:i386 libglu1-mesa:i386 libxmu6:i386

sudo apt-get install libpangox-1.0-0:i386 libpangoxft-1.0-0:i386

sudo apt-get install g++-multilib

Tiếp theo, chúng ta cần đảm bảo chắc chắn rằng chúng ta đang sử dụng gcc-6 trở lên. Chúng ta có thể
làm thế qua các câu lệnh sau:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 10

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 10

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30

sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30

sudo update-alternatives --set c++ /usr/bin/g++

Để chọn phiên bản mặc định:


sudo update-alternatives --config gcc

sudo update-alternatives --config g++

3. Sản sinh khung xương mã – khởi động máy ảo qemu.

Bước đầu tiên cần làm là cài đặt máy ảo qemu. Để làm vậy, trước hết cần mở terminal trong thư mục
tools/labs và chạy dòng lệnh:

make boot

Sau đó, máy ảo qemu sẽ đươc cài đặt.

Để khởi động qemu ta cũng chỉ cần chạy lệnh make boot.

Sau khi máy ảo đã được cài và chạy, ta cần sử dụng một cửa sổ terminal thứ 2 để kết nối với qemu:

Tại cửa sổ thứ 2, gõ lệnh sau:

minicom -D serial.pts

Lúc này, kết quả 2 terminal của máy sẽ hiện ra như sau:

Giờ, chúng ta có thể đóng máy ảo và bắt đầu quá trình sinh khung mã.

Đầu tiên, chúng ta cần chạy lệnh sau:

make clean

rồi sau đó:

LABS=<tên labs> make skels


Trong skels sẽ có các file mã nguồn trống mà học viên phải implement

Sau khi đã implement, chạy:

make build

make copy

Và cuối cùng, để chạy máy ảo:

make boot.

Sau đó các bạn có thể kiểm thử code bằng cách chạy các lệnh được hướng dẫn trên các bài thực hành

Nếu code chính xác và qua các test case của bài thực hành, terminal sẽ hiện ra như trên.

THAM KHẢO:

SO2 Lab 06 - Memory Mapping — The Linux Kernel documentation (linux-kernel-labs.github.io)

Virtual Machine Setup — The Linux Kernel documentation (linux-kernel-labs.github.io)

How to choose the default gcc and g++ version? - Ask Ubuntu

compiling - Cross-compilation issues with GCC/G++ - Ask Ubuntu

Compiling 32 bit on 64 bit Ubuntu not working... [Archive] - Ubuntu Forums

Installing 32-bit libs on a 64-bit Linux system – Humble Bundle

compiling - Help locating linux/version.h - Ask Ubuntu

You might also like