diff --git a/Booting/linux-bootstrap-4.md b/Booting/linux-bootstrap-4.md index 3fc57da..6cfedaf 100644 --- a/Booting/linux-bootstrap-4.md +++ b/Booting/linux-bootstrap-4.md @@ -175,7 +175,7 @@ Now we can setup the stack and verify that the CPU supports long mode and [SSE]( Stack setup and CPU verification -------------------------------------------------------------------------------- -The next we can see assembly code which setups new stack for kernel decompression: +Next we can see assembly code which sets up a new stack for kernel decompression: ```assembly movl $boot_stack_end, %eax @@ -183,7 +183,7 @@ The next we can see assembly code which setups new stack for kernel decompressio movl %eax, %esp ``` -`boots_stack_end` is in the `.bss` section, we can see definition of it in the end of `head_64.S`: +`boots_stack_end` is in the `.bss` section. We can see the definition of it in the end of `head_64.S`: ```assembly .bss @@ -195,9 +195,9 @@ boot_stack: boot_stack_end: ``` -First of all we put address of the `boot_stack_end` into `eax` register and add to it value of the `ebp` (remember that `ebp` now contains address where we loaded - `0x100000`). In the end we just put `eax` value into `esp` and that's all, we have correct stack pointer. +First of all we put the address of `boot_stack_end` into the `eax` register and add to it value of `ebp` (remember that `ebp` now contains the address where we loaded - `0x100000`). In the end we just put the `eax` value into `esp` and that's all, we have a correct stack pointer. -The next step is CPU verification. Need to check that CPU has support of `long mode` and `SSE`: +The next step is CPU verification. We need to check that the CPU supports `long mode` and `SSE`: ```assembly call verify_cpu @@ -205,9 +205,9 @@ The next step is CPU verification. Need to check that CPU has support of `long m jnz no_longmode ``` -It just calls `verify_cpu` function from the [arch/x86/kernel/verify_cpu.S](https://github.com/torvalds/linux/blob/master/arch/x86/kernel/verify_cpu.S) which contains a couple of calls of the `cpuid` instruction. `cpuid` is instruction which is used for getting information about processor. In our case it checks long mode and SSE support and returns `0` on success or `1` on fail in the `eax` register. +It just calls `verify_cpu` function from [arch/x86/kernel/verify_cpu.S](https://github.com/torvalds/linux/blob/master/arch/x86/kernel/verify_cpu.S) which contains a couple of calls to the `cpuid` instruction. `cpuid` is the instruction which is used for getting information about the processor. In our case it checks long mode and SSE support and returns `0` on success or `1` on fail in the `eax` register. -If `eax` is not zero, we jump to the `no_longmode` label which just stops the CPU with `hlt` instruction while any hardware interrupt will not happen. +If `eax` is not zero, we jump to the `no_longmode` label which just stops the CPU with a `hlt` instruction while any hardware interrupt will not happen. ```assembly no_longmode: @@ -216,7 +216,7 @@ no_longmode: jmp 1b ``` -We set stack, checked CPU and now can move on the next step. +We set stack, checked CPU and now can move on to the next step. Calculate relocation address --------------------------------------------------------------------------------