第一个问题,你的理解可以说是对的。
BIOS是和主板一起开发的,所以主板的一些硬件信息只有BIOS清楚,每块主板的BIOS基本都是不同的,主板的具体信息需要BIOS报告给操作系统。
而操作系统只要系统类型一样就是通用的,如个人电脑的操作系统,服务器的操作系统等等。
第二个问题,可以从字面意思说起。
先说Boot Loader,字面意思 启动引导器,显而易见,作用是引导操作系统启动的。
操作系统有一个系统引导程序,Boot Loader就是找到这个程序,执行之。主要用在嵌入式系统或者手机。
BIOS,Basic Input Output System 基本输入输出系统,意思是主板级别的一个小系统。负责系统(主要是主板)的硬件初始化,例如CPU,内存,硬盘,键盘,显示卡,网卡等等硬件的初始化。初始化是BIOS的主要工作。传统的个人电脑上面BIOS会有一个int19 软件中断功能,在初始化完成后,BIOS会进入int19中断,寻找启动介质,如软盘,光盘,硬盘,flash或者网络等等,读取第一个扇区的内容到内存的0000:7C00处,跳入这个地址执行。这里int19就是一个bootloader,启动引导器。所以BIOS具有Boot Loader的功能。当然,目前的BIOS功能已经被扩充了很多,例如电源管理方面的ACPI接口,USB驱动,PXE网络引导功能,硬盘加密,TPM接口,BIOS配置界面,BIOS自动恢复等等。
不过目前的Boot Loader功能也并不单纯,例如u-boot,一个有名的开源boot loader,其实还是会做一小部分硬件初始化的工作,主要用在嵌入式系统。
所以这两个其实很像,不过BIOS主要存在于个人电脑和服务器这里硬件比较复杂的系统;Boot Loader主要存在于嵌入式,手机,等相对简单的系统。
另外,如果对BIOS感兴趣,欢迎到 BIOS人论坛
来看看,如今的BIOS都已经转换为UEFI了,有部分开源的代码可以学习。
BIOS和Bootloader它们都是有基本的初始化系统,USB下载和硬件测试等功能的系统启动程序。BIOS和Bootloader区别:
1、由于bootloader要启动uClinux,因此必须按照uClinux的习惯将中断矢量放在SDRAM的低端地址(0xC000000),BIOS则按照我们通常的习惯把中断矢量放到高端地址(0xC7FF000)。因此,在BIOS下调试下载的程序的ro-base地址都必须设定在0xC000000。
而bootloader下调试下载程序都设定在在0xC008000,因为前面0x8000空间内放置了中断矢量、跳转程序等内容。
2、 所有的SDT实例都是按照BIOS的中断矢量要求来写的,因此我们说,只有在板子上固化了BIOS时,SDT实例才能够正常运行。
所有的ADS实例都是按照Bootloader的中断矢量要求来写的,因此说在板子上固化Bootloader才能够正常运行。