有段时间有写书的想法,可是一直比较懒,到现在也只写了一个提纲。

提纲也好,毕竟是原创,发出来吧。

第一章

SDL

System Description Language (SDL)

是AMI CORE8中引入的一种描述语言,SDL简单的说就是把BIOS代码中经常要改动的地方整理出来,单独放在SDL文件里面。这样要修改BIOS的时候,只需要改动SDL文件就可以了,不用去改动什么ASM,EQU,INC之类的文件。

所以,用SDL的目的是为了易于BIOS工程师更好的维护整个project

第一节
TOKEN

TOKEN在AMI CORE8中是非常重要的,拿到CRB BIOS Source code之后,其实一般改改TOKEN就能制作出一个能点亮主板的BIOS了(如果硬件没什么大问题的话)。

TOKEN可以OUTPUT到EQU或者MAK

因为有的情况是,根本没必要把某个文件或者Module编译进BIOS,用OUTPUT到MAK就可以实现这点。

这里谈点个人经验,AMI做BIOS已经做了很多年了,基本上OEM BIOS需要改什么AMI的工程师都是清楚的,所以很多时候我们OEM BIOS工程师不需要去跑到代码内部去改,改改token就可以了。

至于改哪个token,改为何值,这个其实可以去请教有经验的工程师。当然,自己也可以去摸索。

问别人,当然很快。不过,我们也知道有句话:“纸上得来终觉浅,绝知此事要躬行”。自己摸索其实很有趣,在摸索的过程中是可以学到很多知识的,所以建议初学者有空的话还是多多自己摸索。

很多东西,光是凭别人讲,你是体会不到的。

第二节
ELINK

用CORE8用久了,就会觉得ELINK是个非常好的设计。

CORE8的精髓就是模块化,面向对象思想的运用,虽然个人评价,这两点做得还不是很彻底,不过和Award比,强太多了。

Elink可以被override,也可以自己增加,删除。

假设有这样一种情况:CRB BIOS code中有某段代码我不需要执行,如果是Award代码,我必须到原始asm文件里面去改。但如果是CORE8,借用面向对象的术语,那段代码是可以被OEM Module重载的。

不过CRB BIOS Source里面也不是所有源文件都可以被重载,有些AMI认为不需要被OEM修改的,还有silicon Vendor的一些code,比如Intel的MRC,AMD的Agesa都不是按照CORE8的架构写的,无法被OEM Module重载。

注意:这里的重载应该不是严格意义上C++中的重载,实际意义应该类似于Override,只是一时半会我还找不到能用的中文词汇来表达这个意思。

Elink主函数代码找不到的情况有:
1.没有给源代码,即没有ASM文件,在OBJ文件
2.用了SkipElink宏,

SkipElink MACRO IdProc, Elink, Prolog:=<Skip>, JIdProc:=<jmp_si>, Jxx:=<jz>
 EXTERN Elink&End(DummyExternForOverrides):near
 EXTERN Prolog&Elink&End(DummyExternForOverrides):near
Prolog&Elink PROC NEAR PUBLIC
 %JIdProc IdProc
 Jxx  Elink&End
 jmp  Prolog&Elink&End
Prolog&Elink ENDP
ENDM

第三节
PCI DEVICE

这部分很简单,就是PCI routing的设定,对照硬件设定设好就OK

还有Option ROM,我就碰到过网卡灯闪烁有问题,后来通过升级Option ROM来解决的情况。

第四节
IO DEVICE

这里是legacy设备的一些设定,以前这些设备是在ISA总线上,现在则是LPC。

一般这些设备都是集成在Super I/O芯片里面。

第五节
其他

PATH

MAK的指定

第二章

SSP
ASD

BIOS SETUP脚本语言

ASD就是定义字符串用的

第三章
post asm
bb asm
smi asm

第四章
模块化

第五章
如何开发OEM BIOS
1.Disable CRB?
当然也可以Delete掉CRB

2.Config your own onboard device
a. GPIO Config
GPIO.EQU
放到Modulepart "OEM Board - BSP Files Modification"改
b. Super I/O Reg Mod

3.Microsoft OEM Activation1.0/2.0
4.OEM LOGO/OSB LOGO
5.Intel MRC modification
6.For your custom modify

ITE8718的PECI功能打开
TOKEN
 Name  = "SIO_Secondary_Floppy"
 Value  = "0"
 Help  = "On:/EC register Index 0Ah bit 6 must be 0 for secondary floppy/Off:/External Thermal Sensor Host Selection"
 TokenType = Boolean
 TargetEQU = Yes
 TargetMAK = Yes
End

TOKEN
 Name  = "SIO_ITE8718_Pin55"
 Value  = "2"
 Help  = "External Thermal Sensor Host Selection:/0:AMDSI/1:SST Slave Device/2:PECI/3:SST Host"
 TokenType = Integer
 TargetEQU = Yes
 TargetMAK = Yes
End

ITE8720与此类似。

Intel Desktop CPU从PECI给出的温度值是一个相对值,是相对于TCC的一个值,如果从PECI读出的值为零,说明CPU温度到达TCC,如果读出的值为1,则当前温度是TCC-1,以此类推……

在此,顺便提一下Intel Mobile CPU,Mobile CPU的TCC换了一个名字,叫Tjmax,而且Tjmax可以通过读CPU MSR读出来(Desktop CPU的TCC是不能通过读MSR读出的,ATOM,包括专供笔记本的ATOM N270,也是如此),Merom核心的CPU,Tjmax为85或者100,Penryn核心的则为90或者105。

AMI ITE8718模块的代码是做了直接在BIOS SETUP显示温度值的功能的,但如果是显示从PECI读取的CPU温度值(从PECI读取的温度值只能对应到TMPIN3),会显示负数,比如-50度之类,这时会产生一个问题,CPU的FAN SPEED CONTROLL(FSC)怎么办?

AMI也在BIOS SETUP里面做了设置FSC相关参数的功能,但那些选项无法输入负数。这个问题很好解决,我们可以直接在BIOS代码里面设定相关Register,再把BIOS SETUP相关选项隐藏起来。
按照Intel推荐做法,起转温度=Tcontrol-10,起转PWM为20%,即128*20%=25.6取整为26,至于斜率Slope,按照Intel的要球,要在Tcontrol时风扇转速达到最大,则很容易算出Slope=10PWM/C

Tcontrol的绝对值(offset)可以直接从CPU MSR读出来,于是,代码就很好写了,只要在AMI的那些设置FSC Register的代码之后,自己重设一下相关Register即可。

Sample code:
IF MKF_MRM_FAMILY   
IF MKF_P4_PERFORM
 mov ecx, 01A2h  ;MSR_IA32_TEMP_TARGET_Offset
 RDMSR    ;TControl Offset (IA32_TEMPERATURE[15:8])
 neg ah   ;Tcontrol = -Tcontrol Offset
 sub ah, 10t  ;Start Temp = Tcontrol - 10
 mov al, 061h  ;for Fan_CTL1 is index 61.
 call SIOHHMWriteIO  ;Set Temp limit of Start register(Tcontrol-10)
ENDIF
ENDIF

AMI CORE8 OEM BIOS开发入门相关推荐

  1. AMI CORE8 OEM BIOS

    AMI CORE8 OEM BIOS开发入门 收藏 有段时间有写书的想法,可是一直比较懒,到现在也只写了一个提纲. 提纲也好,毕竟是原创,发出来吧. 第一章 SDL System Descriptio ...

  2. 如何做一个OEM BIOS的案子(从代码架构的角度),抛砖引玉一下

    这个问题挂在心头已经很久了-- 我们都是工程师,可是何谓工程?何样的做法才算是做工程?身为 BIOS工程师的我们,对于人类发展多年的工程学又有多少了解呢? 如何做OEM BIOS Project?如果 ...

  3. 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门(TI达芬奇双核开发资料 [

    基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门 一.简介 TI的达芬奇架构嵌入式应用处理器使用DSP与ARM结合的非对称多核结构,当然现在也有管脚全兼容的单核.本文要介绍的 ...

  4. OMAPL138的DSPLINK开发入门

    OMAPL138的DSPLINK开发入门 2014-07-15 15:17:40 分享: 1.DSPLINK介绍 1.1GPP端 GPP(General Purpose Processor)是指和DS ...

  5. VMware ESXi 8.0 Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

    发布 ESXi 8.0 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:VMware ESXi 8.0 Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集 ...

  6. VMware Fusion 13.0 OEM BIOS Version

    请访问原文链接:VMware Fusion 13.0 OEM BIOS Version,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 使用 VMware Fusion ...

  7. 嵌入式开发入门之经典 ARM开发板

    嵌入式开发入门之经典 开始进入嵌入式世界,真是一头雾水,不知道如何入手!也不知道该如何学习,学习什么,最近从网上转载这篇文章,对我启发很大,对于初始进入嵌入式的人们很有帮组,好多嵌入式大侠都说这是入门 ...

  8. VMware Workstation 16.2.5 Pro Unlocker OEM BIOS for Linux

    macOS Unlocker,支持 macOS Monterey 请访问原文链接:VMware Workstation 16 Pro Unlocker & OEM BIOS for Linux ...

  9. 开机动画适配方案_高通平台刷机包定制方案适配-ROM定制开发入门到精通

    高通平台刷机包定制方案适配-ROM定制开发入门到精通 根据新老平台,高通平台线刷包至少要这样几个基本文件,但不一定全部都需要: 8x10_msimage.mbn----平台镜像,是个完整的磁盘,就是s ...

最新文章

  1. 谷歌大改Transformer注意力,速度、内存利用率都提上去了
  2. 友盟统计--注意事项
  3. 【五校联考7day1】n染色
  4. 第一批鸿蒙系统手机型号,鸿蒙2.0第一批机型名单正式披露!花粉却感叹:华为不够厚道!...
  5. JDBC连接数据库经验集萃
  6. 给年轻人的30条忠告【转自[蓉儿]的QQ空间】
  7. mybaties与hibernate的不同点
  8. 模拟实现STL中map和set容器
  9. logback 常用配置详解appender
  10. 福师离线 微型计算机与外部,福师《计算机应用基础》离线作业答案
  11. 基于JAVA+Spring+MYSQL的失物招领管理系统
  12. envi安装成功教程 附下载地址
  13. 极限学习机的一篇小综述
  14. c语言怎样找无限循环小数的循环体
  15. 恒河aq7275测试软件,横河-AQ7275OTDR测试培训技巧.ppt
  16. uc/os-II的内存改进与实现TLSF算法的详解,移植实现(四)
  17. 中国无损探伤检测行业发展前景与投资战略规划分析报告2021-2027年
  18. 微信小程序的基本操作
  19. html5超萌哈士奇,哈士奇,是一种让人又爱又恨,又拥有自己独特风格的雪橇犬...
  20. 【UER #4】量子态的棋盘

热门文章

  1. C# FTP操作(上传、下载等……)
  2. 痛心!又一中产家庭倒下,为什么我建议你不要轻易买保险?
  3. Docker常用操作帅哥专供版
  4. 对小样本数据进行数据增强
  5. 银行卡收单业务____单边账___现实生活中单边账的处理
  6. 设计模式3-软件设计原则
  7. Java IO流(下)
  8. 量子技术将如何颠覆未来战争形态
  9. elasticsearch实现类似京东的商品搜索效果(elasticsearch动态聚合)
  10. 博弈论与信息经济学-重复博弈