2010-11-14 30 views

Trả lời

96

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.

+0

Cảm ơn bạn, rất hữu ích. –

5

Cập nhật cấu hình cũ với các tùy chọn mới/đã thay đổi/xóa.

18

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 
+2

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

2

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.

13

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.

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:

  1. 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.

  2. 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.

  3. 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ào DEBUG_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ả.

  4. 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

  5. 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ại init/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?

0

Đó 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.

+3

Thử: 'có" "| tạo oldconfig' –

Các vấn đề liên quan