Exported Symbols

Một phần của tài liệu Chương trình sửa mã nguồn hệ điều hành Linux báo cáo dung lượng Ram và thu hồi bộ nhớ theo cơ chế slab cache (Trang 25 - 29)

III. Triển khai

2.2Exported Symbols

2. Linux Modules

2.2Exported Symbols

Khi modules được load, chúng sẽ liên kết động đến nhâ. Với không gian người dung, mã nhị phân được liên kết động chỉ có thể gọi đến hàm chức năng bên ngoài mà đã được xuất ra một cách chính xác để dung, còn trong không gian kernel, việc này được xử lý thông qua các hàm đặc biệt như: EXPORT_SYMBOLO và EXPORT_SYMBOL_GPLO.

Các hàm được xuất ra sẽ sẵn có để dung thông qua modules còn các hàm không được xuất ra sẽ không thể gọi từ modules. Quy tắc liên kết đến và gọi đòi hỏi mức độ nghiêm ngặt hơn rất nhiều so với code trong ảnh kernel lõi. Code của lõi kernel có thể gọi bất cứ giao diện động nào trong kernel bởi vì tất cả các file nguồn của core đều đã được liên kết đến một ảnh cơ sở duy nhất. Do đó, các kí tự được xuất ra (Exported Symbols) cũng không được tĩnh.

Tập hợp các kí hiệu của kernel mà được xuất ra được biết đến như: exported kernel interfaces hay là Kernel API.

Quá trình xuất ra một kí hiệu khá đơn giản: sau khi hàm được khai báo, nó thường được theo sau bởi một hàm EXPORT_SYMBOLO. Ví dụ:

/*

get_pirate_beard_color – return the color of the current pirate’s beard.

The color is define in <linux/beard_colors.h>.

*/ Inget_pirate_beard_color(void) { Return pirate->berad->color; } EXPORT_SYMBOL(get_pirate_beard_color);

Giả sử rằng hàm get_pirate_beard_color() cũng được khai báo trong một file header có thể truy cập được, khi đó, bất cứ module nào cũng có thể tiếp cận đến nó.

Một số lập trình viên mong muốn giao diện họ viết ra chỉ được tiếp cận thông qua GPL- compliant, điều này đòi hỏi kernel linher (Liên kết nhân) sử dụng hàm mà đã được gán nhãn GPL license, bạn cần sử dụng đến hàm sau.

EXPORT_SYMBOL_GPL(get_pirate_beard_color);

Nếu chương trình của bạn có thể cấu hình được thành một module, phải đảm bảo rằng khi nó được biên dịch như một module thì toàn bộ giao diện nó sử dụng đã được xuất ra, nếu không, lỗi liên kết (thậm chí cả việc hỏng module) sẽ xảy ra.

Biên dịch và cài đặt Kernel

Biên dịch kernel với các lệnh sau:

#make

Biên dịch modules với lệnh:

#make modules

Cài đặt modules với lệnh:

#make modules_install

Cài đặt kernel với lệnh:

Tạo ra một ảnh intird

cd /boot

#mkinitramfs –o initrd.img-2.6.39.3 2.6.39.3

Chỉnh sửa file cấu hình Grub:

#update-grub

Một phần của tài liệu Chương trình sửa mã nguồn hệ điều hành Linux báo cáo dung lượng Ram và thu hồi bộ nhớ theo cơ chế slab cache (Trang 25 - 29)