diff --git "a/11 \351\202\271\344\272\250\344\274\237/20240321.md" "b/11 \351\202\271\344\272\250\344\274\237/20240321.md" new file mode 100644 index 0000000000000000000000000000000000000000..1e2cef0f6337a87236069a5ccbf3ba01a4f287c1 --- /dev/null +++ "b/11 \351\202\271\344\272\250\344\274\237/20240321.md" @@ -0,0 +1,43 @@ +## 笔记 + +## BIOS介绍 + +BIOS(英语:Basic Input/Output System,中文:基本输入输出系统,亦称为ROM BIOS、System BIOS、PC BIOS)是在通电引导阶段运行硬件初始化,以及为操作系统和程序提供运行时服务的固件。BIOS最早随着CP/M操作系统的推出在1975年出现。BIOS预安装在个人计算机的主板上,是个人计算机启动时加载的第一个软件。 + +当计算机的电源打开,BIOS就会从主板上的ROM芯片运行,运行加电自检(POST),测试和初始化CPU、RAM、直接存储器访问控制器、芯片组、键盘、软盘、硬盘等设备。当所有的Option ROM被加载后,BIOS就试图从引导设备(如硬盘、软盘、光盘)加载引导程序,由引导程序加载操作系统。BIOS也可从网卡等设备引导。 + +## 上电后系统加载过程中BIOS做了什么 + +BIOS在加载工程中,承担kernel和硬件之前承上启下的作用。对于kernel来说,BIOS类似保镖一般,为其执行做好一切准备;对于硬件设备来说,BIOS就是质检员,检测初始化所有硬件设备,这里初始化包括使能(解复位)和不使能(不解复位)。其中包括: + +1.加电自检,比如 + +对CPU、主板、硬件设备等器件检测,发现错误会给出提示继续执行或直接挂死; + +对DDR解复位、坏块检测并告知OS哪些DDR可用; + +对设备中所有PCIE设备枚举; + +2.寄存器初始化,比如 + +对WATCHDOG等硬件设备寄存器初始化,等等; + +对UART串口初始化并使用; + +3.从引导设备(如硬盘、软盘、光盘)加载引导程序Linux; + +可选: + +4.若ACPI启动,则BIOS根据ACPI协议初始化ACPI,进行设备上报; + +5.若某硬件不适用,可不解复位,则硬件对linux不可见; + +6.使能BIOS一些特性,比如RAS,cpuhostplug,cpu调频等功能(这些功能linux最终会调用到bios接口); + +等等 + +总结来说,BIOS层在kernel执行前做好一切准备,最后引导kernel的启动。 + +## BIOS的定位 + +个人理解,对于linux来说,希望能用最简单的方式知道有哪些硬件设备并使用,而不是将自己工作聚焦在硬件检查、初始化等工作,即硬件的差异性对linux不可见或影响最小,这时候就需要一个中间件来负责做这些工作,即BIOS。