ฉันจะค้นหาพารามิเตอร์การบูตที่ใช้โดยเคอร์เนลที่ใช้งานอยู่ได้อย่างไร


52

มีวิธีหาพารามิเตอร์ใดที่เคอร์เนลบูทหรือไม่?

ตัวอย่างเช่นถ้าฉันระบุ noexec = off ที่บรรทัดคำสั่ง grub? ฉันสามารถดูข้อมูลประเภทนี้ได้หลังจากที่ระบบบูตเสร็จสิ้นหรือไม่?


คำตอบ:


70

cat /proc/cmdlineคุณสามารถเรียกใช้

ตัวอย่าง:

[01:31] ~ $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.38-7-generic root=UUID=025c4231-b7bb-48bf-93e9-d20c5b5ce123 ro crashkernel=384M-2G:64M,2G-:128M quiet splash bootchart=disable acpi_enforce_resources=lax vga=792 vt.handoff=7

พยายามtr ' ' '\n' < /proc/cmdlineหาแนวแบ่งระหว่างพารามิเตอร์
mwfearnley

10

อีกทางเลือกหนึ่งคือตรวจสอบผลลัพธ์ของdmesg(บรรทัดที่ 5 ที่นี่):

$ dmesg | grep "Command line"
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.19.0-33-generic root=UUID=81dba11f-f76e-4ed4-8120-e6da6328b1ee ro

แต่โปรดทราบว่าสิ่งนี้อาจไม่ทำงานหากมีการบันทึกหลายสิ่ง (เช่นหากเครื่องทำงานเป็นเวลานาน) เนื่องจากบรรทัดเริ่มต้นเริ่มต้นอาจถูกผลักออกจาก Ringbuffer


1

ที่จริงแล้วพารามิเตอร์อยู่ระหว่าง__setup_startและ__setup_endในเคอร์เนล ในรหัสต่อไปนี้p->strเป็นชื่อพารามิเตอร์

รหัสเคอร์เนลต่อไปนี้สามารถพบได้ที่ linux-3.4.5 / init / main.c: 388

/* Check for early params. */
static int __init do_early_param(char *param, char *val)
{
    const struct obs_kernel_param *p;
    for (p = __setup_start; p < __setup_end; p++) {
        if ((p->early && parameq(param, p->str)) ||
            (strcmp(param, "console") == 0 &&
             strcmp(p->str, "earlycon") == 0)
        ) {
            if (p->setup_func(val) != 0)
                printk(KERN_WARNING
                       "Malformed early option '%s'\n", param);
        }
    }


    /* We accept everything at this stage. */
    return 0;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.