Tôi muốn xây dựng hạt nhân riêng của riêng mình với một bảng syscall khác. (cùng một syscalls nhưng ở vị trí/số khác nhau)Thay đổi số hệ thống hạt nhân linux
Tôi đã làm việc trên hạt nhân 3.2.29.
Thay đổi hạt nhân là khá dễ dàng:
1) thay đổi vị trí syscall trong vòm/x86/kernel/syscall_table_32.S
2) thay đổi số vĩ mô syscall trong vòm/x86 /include/asm/unistd_32.h
3) biên dịch và cài đặt kernel mới
tôi chuyển sang các syscalls xung quanh: sys_open
mất địa điểm và số lượng sys_read
, và ngược lại.
Tôi thấy rằng nếu tôi biên dịch glibc
với tiêu đề hạt nhân đã sửa đổi, tôi có thể có một hệ thống đang chạy, nhưng không may là nó không đủ và hệ thống của tôi sẽ không khởi động.
Tôi có thiếu gì đó không? Tôi cần phải làm gì khác để có một hệ thống đang chạy?
Các bước tôi đã lấy là:
1) xây dựng và cài đặt kernel như mô tả trong câu hỏi của tôi
2) giải nén kernel header mới sử dụng make headers_install INSTALL_HDR_PATH=[path]
3) xây dựng glibc với thông số --with-headers=[path/include]
4) Tôi đã sử dụng đĩa CD trực tiếp để truy cập hệ thống tệp bên ngoài để cài đặt glibc
mới, sử dụng make install install_root=[the original file system]
(vì vậy hệ thống sẽ không bị hỏng trong khi cài đặt)
Tôi hy vọng rằng glibc
mới được xây dựng đúng cách, nhưng tôi không chắc chắn.
Sau đó, khi khởi động hệ thống, khởi động dừng trong màn hình vỏ (initrafms): Tôi đoán tôi cần phải xây dựng lại initrd
, nhưng làm cách nào để biên dịch nó theo bảng syscall mới?
Vui lòng không đóng bình chọn các câu hỏi về chủ đề, đặc biệt là khi họ có upvotes và câu trả lời. –
Tại sao một người làm như vậy? –
@JonasWielicki trước khi một người nào đó "helpfully" chỉnh sửa nó ra khỏi câu hỏi, nó đã được giải thích rằng đây là thử nghiệm sau một bài tập ở trường để thêm một syscall mới. Trong khi tiện ích có vấn đề, sự thay đổi được dự tính ở đây chắc chắn kêu gọi sự chú ý đến cách mọi thứ hoạt động và có nhiều phụ thuộc. Hacking lên một hệ thống mà không ai phụ thuộc vào có thể là một cách tuyệt vời để tìm hiểu mọi thứ. –