Sử dụng các tiêu đề kernel thời gian thực để biên dịch mã vùng người dùng so với các tiêu đề mặc định


11

Theo yêu cầu của khách hàng, tôi đã cài đặt CentOS 5.6 với kernel mặc định. Với kernel này được cài đặt, tệp time.h bao gồm #define CLOCK_MONOTONIC.

Bây giờ, một kernel thời gian thực đã được cài đặt cùng với kernel-devel và mã của chúng tôi muốn sử dụng CLOCK_MONOTONIC_RAW. Nó tồn tại như một phần của các tệp tiêu đề của kernel, nhưng khi tôi biên dịch mã của chúng tôi, nó không tìm thấy nó trong không gian người dùng chuẩn bao gồm.

Câu hỏi của tôi là, quy trình thích hợp để bao gồm / thay thế time.htìm thấy theo mặc định bằng kernel thời gian thực là gì? Từ nghiên cứu của tôi, có vẻ như các liên kết tượng trưng là xấu, vậy nó nên được xử lý như thế nào? Thủ tục hoặc quy trình là gì? Nâng cấp lên CentOS 6.0 hoặc 5.7 không phải là một tùy chọn cho mỗi yêu cầu của khách hàng.


Bạn có định chèn mô-đun này vào kernel CentOS mặc định không?
bahamat

Câu trả lời:


1

Có một sự khác biệt chính được thực hiện về nơi các tệp tiêu đề đến từ:

  • <time.h>được cung cấp bởi glibc (ví dụ như glibc-headersgói)
  • <linux/time.h> được cung cấp bởi các tiêu đề nhân Linux.

Thay đổi kernel và các gói tiêu đề của nó sẽ không ảnh hưởng <time.h>. Chỉ thay đổi glibc sẽ làm điều đó.

Bạn sẽ thấy rằng glibc <time.h>bao gồm <bits/time.h>giải quyết như ví dụ /usr/include/x86_64-linux-gnu/bits/time.hvà định nghĩa CLOCK_MONOTONIC_RAW. Nếu không, và bạn không thể nâng cấp nó, thì bạn sẽ phải sử dụng mã như thế này:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif

0

Bạn chỉ cần #include <linux/time.h>


Cảm ơn bạn đã phản hồi. Tôi đã kiểm tra vị trí linux / time.h và nó cũng không có tham chiếu đến "RAW". Tôi đang chạy một kernel thời gian thực được cập nhật, nhưng tôi chỉ cần hiểu cách chuyển các tiêu đề của kernel mới có tham chiếu đến "RAW" vào các tệp tiêu đề không gian người dùng. Tôi có ý nghĩa gì không hay cách tiếp cận của tôi có đúng không? Cảm ơn lần nữa vì sự giúp đỡ của bạn.
cabanaboy

@cabanaboy, tôi không chắc bạn đang tìm kiếm ở đâu hoặc tập tin đến từ đâu, nhưng linux / time.h chắc chắn nên xác định CLOCK_MONOTONIC_RAW. Việc bạn có chạy kernel thời gian thực hay không cũng không thành vấn đề; các tiêu đề là như nhau.
psusi

3
@cabanaboy, đợi đã ... bạn đang chạy một hệ điều hành cũ phải được vận chuyển với một nhân cũ hơn 2.6.28 khi được thêm vào. Làm thế nào bạn có được cài đặt kernel mới? Nếu bạn tự xây dựng nó từ nguồn, thì bạn cần phải make install_headers. Nếu bạn có gói kernel được cập nhật, thì bạn cần lấy gói kernel_headers được cập nhật tương ứng.
psusi

0

Các tiêu đề mà bản phân phối của bạn cài đặt không phải là các tiêu đề trong kernel, chúng là các phiên bản sanitzed / "userspaces". Bạn sẽ phải lấy một bản sao của các tiêu đề bao gồm / linux trong các nguồn kernel và thiết lập để chúng được sử dụng theo sở thích trong các tiêu đề trong / usr / include / linux (cần gắn cờ -I cho gcc). Và kiểm tra nếu không có gì sai.


0

Tôi chắc chắn rằng tôi đang xây dựng dựa trên các tiêu đề đi kèm với kernel mới. CLOCK_MONOTONIC_RAWnên được định nghĩa trong linux/time.h. Trước tiên hãy tìm hiểu các tiêu đề bạn đang sử dụng và kiểm tra xem nó được xác định như thế nào trong tệp. Bạn có thể xác định nó trong mã của bạn (chỉ như một kiểm tra) để xem điều gì xảy ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.