diff --git a/Initialization/images/CONFIG_NR_CPUS.png b/Initialization/images/CONFIG_NR_CPUS.png new file mode 100644 index 0000000..5e36552 Binary files /dev/null and b/Initialization/images/CONFIG_NR_CPUS.png differ diff --git a/Initialization/images/NX.png b/Initialization/images/NX.png new file mode 100644 index 0000000..9fdcd46 Binary files /dev/null and b/Initialization/images/NX.png differ diff --git a/Initialization/images/brk_area.png b/Initialization/images/brk_area.png new file mode 100644 index 0000000..4a5ea54 Binary files /dev/null and b/Initialization/images/brk_area.png differ diff --git a/Initialization/images/kernel_command_line.png b/Initialization/images/kernel_command_line.png new file mode 100644 index 0000000..9ff8c7d Binary files /dev/null and b/Initialization/images/kernel_command_line.png differ diff --git a/Initialization/linux-initialization-6.md b/Initialization/linux-initialization-6.md index 0fc97ef..66ef07a 100644 --- a/Initialization/linux-initialization-6.md +++ b/Initialization/linux-initialization-6.md @@ -94,7 +94,7 @@ noexec [X86] 我们可以在启动的时候看到: -![NX](http://oi62.tinypic.com/swwxhy.jpg) +![NX](images/NX.png) 之后我们可以看到下面函数的调用: @@ -471,7 +471,7 @@ void __init early_alloc_pgt_buf(void) 我们也可以使用 `readelf` 工具来找到它: -![brk area](http://oi61.tinypic.com/71lkeu.jpg) +![brk area](images/brk_area.png) 之后我们用 `_pa` 宏得到了新的 `brk` 区段的物理地址,我们计算页表缓冲区的基地址和结束地址。因为我们之前已经创建好了页面缓冲区,所以现在我们使用 `reserve_brk` 函数为 `brk` 区段保留内存块: diff --git a/Initialization/linux-initialization-7.md b/Initialization/linux-initialization-7.md index 993da13..db19a66 100644 --- a/Initialization/linux-initialization-7.md +++ b/Initialization/linux-initialization-7.md @@ -390,7 +390,7 @@ void __init setup_nr_cpu_ids(void) Here `nr_cpu_ids` represents number of CPUs, `NR_CPUS` represents the maximum number of CPUs which we can set in configuration time: -![CONFIG_NR_CPUS](http://oi59.tinypic.com/28mh45h.jpg) +![CONFIG_NR_CPUS](images/CONFIG_NR_CPUS.png) Actually we need to call this function, because `NR_CPUS` can be greater than actual amount of the CPUs in the your computer. Here we can see that we call `find_last_bit` function and pass two parameters to it: diff --git a/Initialization/linux-initialization-8.md b/Initialization/linux-initialization-8.md index 9cd50e9..e030bee 100644 --- a/Initialization/linux-initialization-8.md +++ b/Initialization/linux-initialization-8.md @@ -178,7 +178,7 @@ and initializes handler for the `CPU` [hotplug](https://www.kernel.org/doc/Docum After this we can see the kernel command line in the initialization output: -![kernel command line](http://oi58.tinypic.com/2m7vz10.jpg) +![kernel command line](images/kernel_command_line.png) And a couple of functions such as `parse_early_param` and `parse_args` which handles linux kernel command line. You may remember that we already saw the call of the `parse_early_param` function in the sixth [part](/Initialization/linux-initialization-6.md) of the kernel initialization chapter, so why we call it again? Answer is simple: we call this function in the architecture-specific code (`x86_64` in our case), but not all architecture calls this function. And we need to call the second function `parse_args` to parse and handle non-early command line arguments.