Tôi đang tìm kiếm nếu nó có thể xây dựng cùng một Kerneltwice Linux (cùng một nguồn, cùng một môi trường, cùng một tùy chọn, cùng một trình biên dịch) và có được checksum cùng. Có ai biết cách làm như vậy không?Làm thế nào để xây dựng cùng một hạt nhân Linux hai lần nguồn và nhận được cùng một checksum
Trả lời
Ngày xây dựng được bao gồm trong phiên bản, xem init version.c:
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
và UTS_VERSION được định nghĩa trong bao gồm/linux/compile.h:
/* This file is auto generated, version 1 */
/* PREEMPT */
#define UTS_MACHINE "arm"
#define UTS_VERSION "#1 PREEMPT Mon Jun 29 10:49:17 CEST 2009"
#define LINUX_COMPILE_TIME "10:49:17"
#define LINUX_COMPILE_BY "cynove"
#define LINUX_COMPILE_HOST "jp"
#define LINUX_COMPILE_DOMAIN "evonyc"
#define LINUX_COMPILER "gcc version 4.3.2 (crosstool-NG-1.4.0) "
compile.h được tạo ra bởi kịch bản/mkcompile_h, nơi bạn tìm thấy những dòng sau:
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS `LC_ALL=C LANG=C date`"
Bằng cách xóa date
khỏi đường truyền, bạn sẽ có thể loại bỏ phụ thuộc thời gian xây dựng.
Cách nhanh nhất để kiểm tra sẽ là tạo, sao chép, làm sạch và sau đó thực hiện lại. Nếu kiểm tra phù hợp, sau đó nó có thể. Nếu không thì điều đó gợi ý rằng Make đang thay đổi một số tệp nguồn theo cách nào đó (xây dựng đánh số, xây dựng ngày, v.v ...)
Có lẽ, xây dựng hạt nhân trong cùng một môi trường sẽ dẫn đến cùng một kiểm tra. Vì vậy, cùng một trình biên dịch (cùng một phiên bản của cùng một trình biên dịch), chính xác cùng một nguồn, cùng một phụ thuộc (nếu điều đó có thể áp dụng cho biên dịch hạt nhân), v.v.
Ngay cả với chính xác cùng một thiết lập môi trường (cùng một nguồn, cùng một trình biên dịch và cùng một phụ thuộc), hai bản kế tiếp tạo ra một tổng kiểm tra khác nhau. Tôi nghĩ rằng vấn đề là xung quanh tùy chọn biên dịch và tôi không biết tùy chọn biên dịch nào có thể thay đổi để có được cùng một kiểm tra mà không sửa đổi độ chính xác của hạt nhân. – gsempe
Ngay cả một thế giới chào đơn giản được biên dịch hai lần dẫn đến các tệp nhị phân khác nhau. Bằng cách nào đó, người liên kết đang thêm một số thông tin thay đổi trong mỗi bản dựng.
Điều đó vẫn đúng khi kết quả nhị phân bị tước? – shodanex
câu trả lời của shodanex là đúng nhưng không đầy đủ. Sau khi một số nghiên cứu tôi tìm thấy Linux kernel nhị phân nhúng một ramfs mặc định đó là một lý do khác biệt giữa hai nhân biên dịch (CPIO RAMFS header embeds date). Không thể tắt tính năng này nhưng có thể cung cấp ramfs mặc định. Khi bạn làm như vậy, bạn nhận được chính xác cùng một tổng kiểm tra.
Cảm ơn bạn. Câu trả lời của bạn giúp tôi rất nhiều để giải quyết vấn đề của tôi.
@gsempe, bạn muốn tìm kiếm điều này: "Đặt kernel build deterministic" ref. http://lwn.net/Articles/437864/
nó có thể để thoát khỏi nguồn nhất định của tiếng ồn (tiếng ồn là ... trong mắt của kẻ si tình ;-)
Ngoài ra tuyệt vời nhưng tôi đã giải quyết được vấn đề của mình. Hãy xem tại đây http://stackoverflow.com/a/1214926/21052 – gsempe
- 1. Hạt nhân Linux - Nhận khối bộ nhớ viết cuối cùng
- 2. Làm thế nào để giữ đầu ra asm từ xây dựng mô-đun hạt nhân Linux
- 3. Trong số các mô-đun hạt nhân: Nhiều mô-đun, một tệp Đơn, cùng một tệp nguồn, các tùy chọn xây dựng khác nhau
- 4. Làm thế nào để chuyển một giá trị để xây dựng mô-đun hạt nhân Linux vào lúc khởi động?
- 5. Làm thế nào để xây dựng một nhị phân tĩnh cho cài đặt GNU/Linux với hạt nhân cũ?
- 6. MSBuild/m: 4 không thành công vì nó xây dựng cùng một dự án hai lần
- 7. Làm thế nào để gọi cùng một mục tiêu msbuild hai lần?
- 8. Oracle AQ cùng một thông điệp được gửi hai lần
- 9. Dải nguồn hạt nhân Linux theo .config
- 10. Làm thế nào để lấy cùng một cột hai lần với các điều kiện khác nhau trong cùng một bảng?
- 11. JQuery và Ajax.BeginForm() đăng cùng một dữ liệu hai lần
- 12. Cùng một Ajax được gọi hai lần..JQuery
- 13. Truyền hai lần trong cùng một dòng
- 14. Làm thế nào để tôi xây dựng hai trình cài đặt khác nhau từ cùng một tập lệnh trong inno?
- 15. Xây dựng lặp lại từ cùng một mã nguồn C# trên các máy khác nhau
- 16. Làm thế nào để mmap một bộ đệm hạt nhân Linux để không gian người dùng?
- 17. Matlab - xây dựng một ma trận bằng cách hợp nhất cùng một vector thô nhiều lần
- 18. Có thể nhận CMake để xây dựng cả phiên bản tĩnh và chia sẻ của cùng một thư viện không?
- 19. Sử dụng GNU Thực hiện để xây dựng cả hai mục tiêu gỡ lỗi và phát hành cùng một lúc
- 20. Làm thế nào để tự động tải một mô-đun hạt nhân trong Gentoo Linux?
- 21. XNA - Tạo nhiều hạt cùng một lúc
- 22. Làm thế nào để xây dựng qt ra khỏi nguồn
- 23. Làm thế nào để tách một chuỗi và nhận được kết quả cuối cùng trong jQuery?
- 24. Lập trình mô-đun hạt nhân Linux: makefile
- 25. Làm thế nào để dọn dẹp bộ nhớ cache được sử dụng bởi hạt nhân Linux
- 26. Làm thế nào để gỡ lỗi hạt nhân Linux với GDB và QEMU?
- 27. Một số dự án hạt nhân Linux nhỏ, thú vị nào giúp tìm hiểu nguồn?
- 28. Xcode 5 cho thấy cùng một thiết bị hai lần
- 29. Linux mutexes hạt nhân
- 30. Làm thế nào để in các nhân vật cùng nhiều lần với Console.WriteLine()
Edition của @RamenChef không thực hiện bất kỳ cảm giác ... Có thực sự StackOverflow có thể đang trở nên quá tệ? – gsempe