Linux开机启动,如何启动内核? (linux怎么启动内核)

Linux操作系统在开机时,需要启动内核,以便让系统能够正常运行。内核是操作系统的核心组件,它负责管理操作系统的资源,控制系统的运行,处理外部设备的数据等。本文将介绍Linux开机启动过程中如何启动内核。

1. BIOS加载

在电脑开机时,计算机会首先加载Basic Input/Output System(BIOS),BIOS是一种固化在主板固件中用于在开机时初始化硬件和启动操作系统的程序。首先BIOS会进行硬件自检,然后扫描并加载硬盘上的引导扇区。

2. 引导扇区的加载

引导扇区是硬盘上的一个区域,它负责加载操作系统的引导程序。在Linux系统中,引导程序位于/boot/grub/目录下的grub.cfg文件中。该文件包含了操作系统的启动选项和引导顺序。

当BIOS加载了引导扇区后,它会扫描引导扇区的内容,并将控制权交给引导程序。引导程序的主要作用是加载内核,并将操作系统的控制权转交给内核。

3. 内核加载

引导程序将加载内核的过程分为两个阶段:之一个阶段和第二个阶段。

之一个阶段:引导程序会从硬盘中找到内核文件,并将内核文件加载到内存中。内存地址通常是0x100000(1MB),然后跳转到此地址,进入第二个阶段。

第二个阶段:内核已经在内存中运行,操作系统从此时开始启动。内核启动时会执行一些初始化操作:

1. 内核会检测系统的硬件设备,如处理器、内存、硬盘、输入设备等。

2. 内核会初始化CPU,并分配CPU时间片,就像操作系统分配CPU时间片一样,以便让各个进程可以轮流执行。

3. 内核还会加载一些模块,如驱动程序等,以便系统能够识别硬件设备并进行相应的操作。

4. 内核会加载root文件系统,这是Linux操作系统中的核心文件系统。root文件系统包含了所有操作系统的文件和目录。

5. 内核会运行init程序,init程序是Linux操作系统中的之一个进程,它会初始化操作系统,并启动其他服务进程。

在Linux操作系统中,内核是最重要的组件之一,它是操作系统的核心,并负责管理硬件资源和控制系统的运行。在Linux开机启动过程中,首先BIOS会加载引导扇区,然后引导程序会加载内核,并将控制权交给内核。内核会执行一些初始化操作,包括检测硬件、初始化CPU、加载驱动程序和root文件系统等。内核会运行init进程,初始化操作系统,并启动其他服务进程。

相关问题拓展阅读:

如何使linux开机时选择要进入的内核版本

开机一直按E键即可进入内核选择界面。

找了蛮久解决方案的一个问题……

编辑 /etc/default/grub (比如命令:sudo gedit /etc/default/grub)

找到 hidden_timeout 数字改为10,保存

终端执行命令:sudo update-grub

sudo reboot重启 ,正常的话 会有一个

倒计时

那个时候按住shift 然后在菜单栏里选就ok了

启动Linux操作系统后,按‘e’键进入Grub引导界面,选择指定内核进行引导。

在开机后的引导菜单里面用键盘上的上下方向键选择,回车就可以了

修改grub.cfg

如何使用bochs启动linux2.6.0版本内核

当然不能真正启动就panic了,但是单步调试和理解内核在x86平台启动已经够了灶罩逗。

bochs下运隐卖行linux3.0内核(已验证)

1. 构造调试环境

由于bochs内建调试功能, 且支持gdb, 用它调试内核会很方便.

(文章中大部分命令的运行需要root权限,以sudo方式运行)

1.1 构建磁盘镜像

Shell代码

dd if=/dev/zero of=hd0.img

count=$((63*16*100))

用这个命令可以构建一个50MB左右的磁盘镜像, 输出结果如下:

100800+0 records in

100800+0 records out

bytes (52 MB) copied, 0.s, 70.3

MB/s

注意count必须为63*16的倍数, 否则bochs识别硬盘会有问题.

1.2 挂载磁盘镜像

Shell代码

losetup /dev/loop0 hd0.img

这个命令可以将文件绑定到一个loop设备. 如果/dev/loop0不存闷首在, 可以尝试 modprobe

loop.

然后进行设备初始化:

Shell代码

cfdisk -s63 -h16/dev/loop0

只创建一个主分区就可以. 写入后, 用命令fdisk检查结果:

Shell代码

fdisk -lu /dev/loop0

Disk /dev/loop0: 51 MB,bytes

16 heads, 63 sectors/track, 100 cylinders, total

sectors

Units = sectors of 1 * 512 = 512 bytes

Disk identifier: 0x

Device Boot Start End Blocks Id System

/dev/loop0p368+ 83 Linux

将分区1挂载到/dev/loop1.

Shell代码

losetup /dev/loop1 hd0.img -o

$((63*512))

格式化/dev/loop1为ext3格式.

Shell代码

mkfs.ext3 /dev/loop1

在mnt下创建img目录, 做以后维护用.

Shell代码

mkdir -p /mnt/img

将loop1挂载到/mnt/img

Shell代码

mount /dev/loop1 /mnt/img/

安装引导程序. 因为我狂热倾向于模块化架构, 所以选择GRUB2.

本文以grub-1.97~beta3为示例,

读者可自行安装其他的引导系统如lilo.

Shell代码

mkdir /mnt/img/boot

cp -r /usr/lib/grub/i386-pc/

/mnt/img/boot/grub

生成一个core.img, biosdisk负责读取磁盘, part_msdos负责处理MBR,

ext2负责读取ext3分区.

Shell代码

cd /mnt/img/boot/grub/

grub-mkimage -O i386-pc -o core.img biosdisk part_msdos

ext2

Shell代码

ls -lh core.img

-rw-r–r–1 root root 25K Sep2114:28

core.img

只有区区的25K.. 里面甚至还包含一个小的应急shell, 不过作用不大.

安装grub2到(hd0), 根目录在(hd0,1)

Shell代码

echo”(hd0) /dev/loop0″ >

./device.map

grub-setup -m ./device.map -d /mnt/img/boot/grub/ -r

‘(hd0,1)’ ‘(hd0)’

检查一下安装成果:

Shell代码

hexdump -C /dev/loop0 | less

如果你能看到:

Shell代码

d e8 2e00 cd18 eb

fe65|}…….GRUB .Ge|

f 6d6973 6b|om.Hard

Disk.Rea|

就说明安装成功.

清理一下.

Shell代码

cd

umount /mnt/img

losetup -d /dev/loop1

losetup -d /dev/loop0

1.3 启动测试.

给上面的hd0.img配一个bochsrc文件, 可以拿bochs示例dlxlinux的配置文件来改,

只需将硬盘换为:

Shell代码

ata0-master: type=disk, path=”hd0.img”, cylinders=100,

heads=16, spt=63

然后启动Bochs, 顺利的话, 你能看到传说中的grub2 shell.

2. 从启动到保护模式.

为我们的bochs虚拟机编译一个内核. 不必太复杂,

目前我们只关心启动部分.

2.1 安装内核

退出bochs, 挂载hd0.img:

Shell代码

mount hd0.img /mnt/img/ -o

loop,offset=$((63*512))

拷贝bzImage.

Shell代码

cp /usr/src/linux/arch/i386/boot/bzImage

/mnt/img/boot/vmlinuz-3.0.00

这两个步骤可以放到内核的Makefile中, 以后每次编译完成后,

自动更新到hd0.img里.

然后将下列配置写到/mnt/img/boot/grub/grub.cfg

Shell代码

# Timeout for menu

set timeout=10

# Set default boot entry as Entry0

set default=0

# Entry0- Load Linux kernel

menuentry”Linux-3.0.00″{

set root=(hd0,1)

linux

/boot/vmlinuz-3.0.00root=/dev/hda1

关于linux怎么启动内核的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux开机启动,如何启动内核? (linux怎么启动内核)