今回はmain関数から最初に呼び出している「copy_boot_params」を見てみます。
====
static void copy_boot_params(void){struct old_cmdline {u16 cl_magic;u16 cl_offset;};const struct old_cmdline * const oldcmd =(const struct old_cmdline *)OLD_CL_ADDRESS;BUILD_BUG_ON(sizeof boot_params != 4096);/* ブートパラメータをコピーする *//* コピー元のhdrは「header.S」にて定義されているもの */memcpy(&boot_params.hdr, &hdr, sizeof hdr);/* 以下はカーネルバージョンが古いとき(2.02以前?)に通る処理 */if (!boot_params.hdr.cmd_line_ptr &&oldcmd->cl_magic == OLD_CL_MAGIC) {/* Old-style command line protocol. */u16 cmdline_seg;/* Figure out if the command line falls in the regionof memory that an old kernel would have copied upto 0x90000... */if (oldcmd->cl_offset < boot_params.hdr.setup_move_size)cmdline_seg = ds();elsecmdline_seg = 0x9000;boot_params.hdr.cmd_line_ptr =(cmdline_seg << 4) + oldcmd->cl_offset;}}
====
カーネルバージョンが新しければブートパラメータを「boot_params.hdr」へコピーしているだけです。
コピー元のhdrは先日見た「header.S」で定義しています。
====
.section ".header", "a".globl hdrhdr:setup_sects: .byte SETUPSECTSroot_flags: .word ROOT_RDONLYsyssize: .long SYSSIZEram_size: .word RAMDISKvid_mode: .word SVGA_MODEroot_dev: .word ROOT_DEVboot_flag: .word 0xAA55
====
各々の意味については下記のドキュメントが参考になります。
Linux JF (Japanese FAQ) Project.
0 件のコメント:
コメントを投稿