Bất cứ ai có thể giải thích mục tiêu "oldconfig" thực hiện chính xác trong makefile hạt nhân Linux không? Tôi thấy nó được tham chiếu trong một số tài liệu xây dựng nhưng không bao giờ giải thích nó chính xác là gì."Làm cho oldconfig" làm chính xác trong makefile hạt nhân Linux là gì?
Trả lời
Nó đọc tệp hiện có .config
và nhắc người dùng về các tùy chọn trong nguồn hạt nhân hiện tại không được tìm thấy trong tệp. Điều này rất hữu ích khi lấy một cấu hình hiện có và di chuyển nó sang một hạt nhân mới.
Cập nhật cấu hình cũ với các tùy chọn mới/đã thay đổi/xóa.
Trước khi bạn chạy 'make oldconfig' Bạn cần sao chép tệp cấu hình hạt nhân từ hạt nhân cũ vào thư mục gốc của hạt nhân mới.
Bạn có thể tìm bản sao tệp cấu hình hạt nhân cũ trên hệ thống đang chạy tại /boot/config-3.11.0
. Ngoài ra, mã nguồn kernel có configs trong linux-3.11.0/arch/x86/configs/{i386_defconfig/x86_64_defconfig}
Nếu nguồn kernel của bạn nằm ở/usr/src/linux
cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfig
Không xây dựng hạt nhân dưới dạng root! xem https://www.youtube.com/watch?v=fMeH7wqOwXA#t=15m44s – ted
Từ này page:
Hãy oldconfig lấy .config và chạy nó thông qua các quy tắc của các tệp KDE và tạo một tệp .config, là nguyên tắc nhất quán với các quy tắc KDE . Nếu có các giá trị CONFIG bị thiếu, cấu hình make #sẽ yêu cầu chúng.
Nếu .config đã được bao gồm với các quy tắc được tìm thấy trong Kconfig, thì làm cho oldconfig về bản chất là một no-op.
Nếu bạn định chạy oldconfig, sau đó chạy đặt oldconfig là lần thứ hai, lần thứ hai sẽ không gây ra bất kỳ thay đổi bổ sung nào là được thực hiện.
Tóm tắt
Như đã đề cập by Ignacio, nó cập nhật của bạn .config
cho bạn sau khi bạn cập nhật các nguồn hạt nhân, ví dụ với git pull
.
Nó cố gắng giữ các tùy chọn hiện tại của bạn.
Có một kịch bản cho điều đó là hữu ích vì:
tùy chọn mới có thể được thêm vào, hoặc những cái cũ lấy
định dạng cấu hình Kconfig của hạt nhân có các tùy chọn mà:
- ngụ ý một cách khác thông qua
select
- phụ thuộc vào một hình thức khác thông qua
depends
Các mối quan hệ tùy chọn đó làm cho độ phân giải cấu hình thủ công trở nên khó khăn hơn.
- ngụ ý một cách khác thông qua
Hãy sửa đổi .config bằng tay để hiểu cách thức giải quyết các cấu hình
Đầu tiên tạo ra một cấu hình mặc định với:
make defconfig
Bây giờ chỉnh sửa tạo .config
tập tin bằng tay để mô phỏng một bản cập nhật kernel và chạy:
make oldconfig
để xem điều gì xảy ra. Một số kết luận:
Ngành, nghề loại:
# CONFIG_XXX is not set
không chỉ bình luận, nhưng thực tế cho thấy rằng các tham số không được thiết lập.
Ví dụ, nếu chúng ta loại bỏ các dòng:
# CONFIG_DEBUG_INFO is not set
và chạy
make oldconfig
, nó sẽ yêu cầu chúng tôi:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
Khi nó kết thúc, file
.config
sẽ được cập nhật.Nếu bạn thay đổi bất kỳ ký tự nào của dòng, ví dụ: đến
# CONFIG_DEBUG_INFO
, nó không được tính.Ngành, nghề loại:
# CONFIG_XXX is not set
luôn sử dụng cho sự phủ định của một tài sản, mặc dù:
CONFIG_XXX=n
cũng được hiểu như là sự phủ định.
Ví dụ, nếu bạn loại bỏ
# CONFIG_DEBUG_INFO is not set
và trả lời:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
với
N
, sau đó các tập tin đầu ra bao gồm:# CONFIG_DEBUG_INFO is not set
và không:
CONFIG_DEBUG_INFO=n
Ngoài ra, nếu chúng tôi sửa đổi dòng theo cách thủ công thành:
CONFIG_DEBUG_INFO=n
và chạy
make oldconfig
, sau đó dòng được sửa đổi để:# CONFIG_DEBUG_INFO is not set
mà không
oldconfig
yêu cầu chúng tôi.Xác nhận có phụ thuộc không được đáp ứng, không xuất hiện trên
.config
. Tất cả những người khác đều làm.Ví dụ, hãy đặt:
CONFIG_DEBUG_INFO=y
và chạy
make oldconfig
. Nó sẽ yêu cầu chúng tôi:DEBUG_INFO_REDUCED
,DEBUG_INFO_SPLIT
, v.v.Các thuộc tính đó không xuất hiện trên
defconfig
trước đây.Nếu chúng ta nhìn dưới
lib/Kconfig.debug
nơi chúng được định nghĩa, chúng ta thấy rằng chúng phụ thuộc vàoDEBUG_INFO
:config DEBUG_INFO_REDUCED bool "Reduce debugging information" depends on DEBUG_INFO
Vì vậy, khi
DEBUG_INFO
đã tắt, họ không xuất hiện ở tất cả.Xác nhận là
selected
bằng cách bật cấu hình được tự động đặt mà không hỏi người dùng.Ví dụ, nếu
CONFIG_X86=y
và chúng tôi xóa dòng:CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
và chạy
make oldconfig
, dòng được tái tạo mà không yêu cầu chúng tôi, không giống nhưDEBUG_INFO
.Điều này xảy ra bởi vì
arch/x86/Kconfig
chứa:config X86 def_bool y [...] select ARCH_MIGHT_HAVE_PC_PARPORT
và chọn lực lượng tùy chọn đó là đúng. Xem thêm: https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
Không nhận được các thông báo có ràng buộc.
Ví dụ,
defconfig
đã thiết lập:CONFIG_64BIT=y CONFIG_RCU_FANOUT=64
Nếu chúng ta chỉnh sửa:
CONFIG_64BIT=n
và chạy
make oldconfig
, nó sẽ yêu cầu chúng tôi:Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW)
Điều này là do
RCU_FANOUT
là được xác định tạiinit/Kconfig
là:config RCU_FANOUT int "Tree-based hierarchical RCU fanout value" range 2 64 if 64BIT range 2 32 if !64BIT
Do đó, mà không
64BIT
, giá trị tối đa là32
, nhưng chúng tôi đã có64
bộ trên.config
, mà sẽ làm cho nó phù hợp.
Tiền thưởng
make olddefconfig
bộ mỗi tùy chọn để giá trị mặc định của họ mà không hỏi tương tác. Nó được tự động chạy trên make
để đảm bảo rằng .config
nhất quán trong trường hợp bạn đã sửa đổi nó theo cách thủ công như chúng tôi đã làm.Xem thêm: https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree
make alldefconfig
giống như make olddefconfig
, nhưng cũng chấp nhận đoạn cấu hình để hợp nhất. Mục tiêu này được sử dụng bởi merge_config.sh
kịch bản: https://stackoverflow.com/a/39440863/895245
Và nếu bạn muốn để tự động hóa việc sửa đổi .config
, đó không phải là quá đơn giản: How do you non-interactively turn on features in a Linux kernel .config file?
Đó là tra tấn. Thay vì bao gồm một tập tin conf chung, họ làm cho bạn nhấn trở lại 9000 lần để tạo ra một.
Thử: 'có" "| tạo oldconfig' –
- 1. Lập trình mô-đun hạt nhân Linux: makefile
- 2. "do {...} trong khi (0)" làm gì chính xác trong mã hạt nhân?
- 3. __init có nghĩa là gì trong mã hạt nhân Linux?
- 4. Chuỗi hạt nhân là gì?
- 5. Linux mutexes hạt nhân
- 6. Thời gian đo trong Không gian hạt nhân Linux Với Độ chính xác phụ Micro giây
- 7. Phần hạt nhân không khớp là gì?
- 8. distro cho phát triển hạt nhân linux
- 9. Thực hiện đồng bộ hóa mô-đun chính xác trong hạt nhân Linux
- 10. về typecheck trong hạt nhân linux
- 11. Làm cách nào để thêm đường dẫn bao gồm cho makefile mô-đun hạt nhân
- 12. Tổ chức tiêu đề hạt nhân Linux
- 13. Tôi muốn đóng góp cho hạt nhân Linux
- 14. Sự khác biệt giữa module_init và init_module trong mô-đun hạt nhân Linux là gì?
- 15. Chức năng aio hạt nhân linux
- 16. Mục đích của mã hóa UD2 trong hạt nhân Linux là gì?
- 17. Sự khác biệt b/w __raw_readl/__ raw_writel và readl/writel trong hạt nhân Linux là gì?
- 18. Tạo biểu đồ cuộc gọi tĩnh cho hạt nhân Linux
- 19. Cách đọc/ghi tệp trong mô-đun hạt nhân Linux?
- 20. Tắt (linux) linux từ hạt nhân-không gian
- 21. Tải mô-đun hạt nhân trong hạt nhân Android
- 22. Trạng thái ngăn xếp hạt nhân của quá trình Linux khi tạo quy trình là gì?
- 23. Biên dịch Lỗi hạt nhân Linux xt_CONNMARK.h
- 24. Mối quan hệ giữa hệ điều hành Linux và hạt nhân là gì?
- 25. Làm cách nào để gửi bản vá tiềm năng cho hạt nhân Linux?
- 26. ngăn xếp hạt nhân cho quá trình linux
- 27. Hạt nhân Linux Vô hiệu hóa mục nhập TLB
- 28. Kiểu mã hóa hạt nhân Linux
- 29. nhiệm vụ lặp lại hrtimer trong hạt nhân Linux
- 30. Truyền DMA trong trình điều khiển hạt nhân Linux PCIE
Cảm ơn bạn, rất hữu ích. –