自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(45)
  • 资源 (4)
  • 收藏
  • 关注

原创 UEFI开发探索33 – 再谈串口通信

(请保留-> 作者: 罗冰)UEFI系列博客的第20篇中,曾经尝试过构建串口通信的代码。发送串口数据在当时已经实现了,可是没有找到如何判断是否有可读的数据,读取串口没有成功。偶尔能读到串口数据,只能证明读函数起作用了。在多年的开发经历中,我曾经开发过各种MCU的串口代码,也在DOS和Legacy BIOS下开发过。读取串口,基本都是使用中断(或者配合DMA)方式。Windows下的串...

2019-09-22 13:06:25 1215 2

原创 UEFI开发探索32 – 有趣的图像特效

(请保留-> 作者: 罗冰)PhotoShop和ACD See中,有各种对图像进行特效处理的功能,我在大学的时候就很着迷,一度考虑报考图像处理相关的研究生专业。可惜生活总是变幻无常,推着我走向了另外一条道路,曾经的梦想还没出航就搁浅了。不过这也影响了我之后的编程生涯,在底层开发的时候,总想着搞清楚各种图像的特效是怎么实现的。这次准备拿UEFI App来开刀。1灰度转换...

2019-09-22 13:03:07 723 5

原创 UEFI开发探索31–鼠标GUI构建

(请保留-> 作者: 罗冰)进行了上一篇博客所描述的各种实验,相关的代码基本都已经搭建好了,我们可以着手进行对GUI界面的鼠标支持了。UEFI对开发者提供中断支持,所有异步操作都可以通过Event来完成。Simple Pointer Procotol也提供了对此机制的支持,根据文档中函数的说明,构建如下的函数:图1 鼠标GUI函数Line8-Line10的四个函数是...

2019-09-22 12:41:04 1213 2

原创 UEFI开发探索30 –鼠标初探

(请保留-> 作者: 罗冰)我的UEFI开发探索的系列博客,一直都有一根主线的存在,那就是在测试板上把UEFI的Option ROM开发出来。回想到目前为止,总线及设备访问:PCI、Smbus、串口,都已经实现过了(串口实现不大完美,但在测试板上不需要使用);界面相关:屏幕画图、文字显示、图像(BMP、PCX、JPEG)显示,也已经完成;用户交互:键盘已经完成,鼠标还没有写。也就...

2019-09-22 12:37:22 1301 2

原创 UEFI开发探索29 – 图像显示(JPEG)

(请保留-> 作者: 罗冰)最近大部分时间都在研究怎么调试了。原计划的图像显示系列,落后不少进度。之前介绍的BMP和PCX格式,都是无损压缩格式。今天想研究下有损压缩的明星—Jpeg格式。本来是准备了四种格式的研究:BMP、PCX、JPEG和ICO。因为时间原因,ICO就不再继续编程了。如果未来有需要,到时再把它补上吧。这篇博客是图像显示系列的最后一篇了。1图像开源库...

2019-09-22 12:34:30 1141 1

原创 UEFI开发探索28 – 用Windbg建立UEFI调试环境

(请保留-> 作者: 罗冰)最近的翻译计划和博客计划严重滞后。一方面是因为有两个案子在推进,业余时间也被占用;另外一方面,在尝试用windbg搭建调试环境的时候,遇到了一些阻碍。大部分情况下,我都是使用win10的虚拟机,配合UDK2018开发的。对照文档,第一次尝试就失败了。文档中建议的环境是Win 7/Win8 64位,UDK2010。搭建win7的虚拟机,安装Vs2008+...

2019-09-19 16:32:10 2047 1

原创 UEFI开发探索27 – 用Vs2015建立UEFI调试环境

(请保留-> 作者: 罗冰)我使用AppPkg进行Uefi app和UEFI oprom的开发,这样很方便生成在实际硬件中运行的代码。而在日常的开发调试,不可能有硬件环境,一般会使用UEFI中生成的模拟环境,其执行文件为SecMain.exe,是在Nt32Pkg中生成的。我一般是将生成文件拷贝到其同目录下,运行SecMain.exe,进入模拟UEFI Shell执行生成文件。当然...

2019-09-19 16:24:58 1967

原创 UEFI开发探索26 – UEFI下观察汇编代码

(请保留-> 作者: 罗冰)上一篇博客中遇到了奇怪的问题,明明没有使用的函数,在编译的时候竟然报错,提示使用了此函数,而且导致程序无法链接。这让我意识到,还是得建立完整的调试环境,帮助学习开发。一直以来,我调试代码的方法大概有三种:1) 打印输出。这是最常用的,也最方便的。不管是通过屏幕打印输出,还是通过串口、USB口等硬件设备打印,都能知道很多程序的内部信息;2) 观察汇编...

2019-09-19 16:18:55 1853

原创 UEFI开发探索25 – 图像显示(PCX)

(请保留-> 作者: 罗冰)隔离卡的界面开发中,PCX实际上用得最多。主要是因为它采用了RLE压缩,在颜色不多的情况下,能够比较小。这也逼着我使用各种工具,比如PS、ACDSEE甚至是画图软件,来调整其色彩数,以减少图像尺寸。毕竟隔离卡的ROM只有64K可用,因此常用的是256色PCX。PCX其实也支持24位真彩色,本篇中我尝试在UEFI Shell下显示24位真彩色PCX文件。...

2019-09-19 12:46:47 843 3

原创 UEFI开发探索24 – 图像显示(BMP)

(请保留-> 作者: 罗冰)BMP是微软推荐和支持的标准图像文件格式,图像数据不经过压缩直接存盘,直译过来是位图(bitmap)。最早的时候,Windows自带的画图程序只支持bmp格式,现在缺省支持PNG了。这种格式比较简单,数据结构也非常容易看懂。我在开发隔离卡、Option ROM以及嵌入式产品时,如果需要用到图像,只要空间允许,都是用BMP格式。代码简单,很多时候几行循环...

2019-09-19 12:35:31 1970 4

原创 UEFI开发探索23 – File IO(文件读写)

(请保留-> 作者: 罗冰)Option ROM的开发中,很少用到文件读写。因此,在最早开发的过程中,我没有仔细研究过文件处理相关的Protocol。倒是在编写显示图片例程的时候,涉及到了一些。我直接使用了UDK中的例子,改造了显示BMP的函数,函数内部封装了文件读取。接下来我准备用几篇博客,演示如何显示图片。UEFI画图的程序,在之前的博客中已经讨论演示过了。下面需要做的,是解...

2019-09-19 12:28:04 3430 6

原创 UEFI开发探索22 – 环境搭建3(使用UDK2018搭建)

(请保留-> 作者: 罗冰)之前搭建UDK2017和UDK2018失败,我只能使用以前的开发环境WinXP+UDK2010来调试程序。总感觉自己像个史前程序员,XP下很多工具都没法使用的。比如我想看某个函数的定义,只能使用TotalCmd全文件夹搜索,感觉很不爽。今天去公司加班,广州有客人来访。下午送走客人后,我盯着以前写的“搭建环境”的博客,下定决心,一定要用上win10+UDK2...

2019-09-19 12:25:03 3796 4

原创 UEFI开发探索21 – SMBUS通信

(请保留-> 作者: 罗冰)SMBus是1995年由Intel提出的一种双线通信专利技术,它完全符合系统管理总线规范1.1版,与I2C串行总线兼容。与当前流行的高速串行协议相比,SMBus的速度比较慢,但因其使用硬件少,支持此协议的产品非常多,在当前的计算机行业仍然有很大的应用面。在开发双网隔离计算机的过程中,需要解决三方通信问题。即Windows/Linux层App、控制卡Firm...

2019-09-19 11:44:00 3813 4

原创 UEFI开发探索20 – 串口通信

(请保留-> 作者: 罗冰)串口可能是生命力最强的接口标准了,从1980年到现在,仍旧在发挥巨大的作用。特别是工业环境下,可说是王者标准了。前几年开发过网络转串口,我惊奇的发现很多金融场合也在用串口。扯远了,回到UEFI下的串口通信。1 Shell命令查看串口我的开发环境仍旧是虚拟机winxp+UDK2010,一直没有时间去搭建UDK2018。UEFI Shell中有个命...

2019-09-17 22:48:12 1760 5

原创 UEFI开发探索19 – 使用HII显示汉字4

(请保留-> 作者: 罗冰)已经实现了UEFI Shell下使用SimpleFont和Font,在Graphics模式下来实现就相对容易很多了。我大部分的工作都是在整理文件,以及按照之前的代码结构,专为Hii构建了源代码文件,把一些细节封装起来,以备后用。图1 整理好的源代码可以讲解的地方不多,主要是在开发中遇到的一些问题:FontName的作用。在创建Font...

2019-09-17 22:39:37 883 1

原创 UEFI开发探索18 – 使用HII显示汉字3

(请保留-> 作者: 罗冰)本篇博客的关键字:Font。今天准备把UEFI另外一种字体Font的方方面面研究一下,仍旧是以代码移植为主,间以解决自己提的几个问题。1 Text模式和Graphics模式实验之前,我想谈一下Text模式和Graphics模式。UEFI spec中,对于Text模式和Graphics模式谈得比较少。我一直很疑惑,spec中的Text模式和Graph...

2019-09-16 17:04:10 1693

原创 UEFI开发探索17 – 使用HII显示汉字2

(请保留-> 作者: 罗冰)本篇博客的关键字:SimpleFont。上次编程后,我始终在思考如何在UEFI Shell下显示汉字。上一篇中,参考书中的例子,基本了解了字符串资源是怎么组织的。当在TestString函数中,把参数Language改为”zh-Hans”,什么也没有显示。看来还是缺少相应的字库。UEFI下提供了SimpleFont和Font字体,前一个相对简单些,...

2019-09-15 12:52:24 1236 4

原创 UEFI开发探索16 – 使用HII显示汉字1

(请保留-> 作者: 罗冰)上一次博客中,我使用自己的方法显示汉字,其核心思想不外乎利用实现的画点函数,将汉字一个像素一个像素地画出来。很明显,这种方法只能在图形模式下实现。如果想在字符模式下显示(比如UEFI Shell),则无能无力了。虽然目前商用的Option Rom不可能用到字符模式,奈何寻根究底的程序员本性,驱使着我把UEFI本身提供的Human Interface Inf...

2019-09-15 11:32:31 2395 2

原创 UEFI开发探索15 – 图形模式下文字显示

(请保留-> 作者: 罗冰)UEFI中提供了HII(Human Interface Infrastructure)用来处理图形界面的文字显示,这一块我一直没有去仔细研究。到目前为止,显示汉字和字符,我都没有采用这种方法。比如之前博客中演示了测试样卡的界面,图形中用到了各种英文和汉字,都是采用我自己的方法来实现的。HII的思考方式不大直接,当时我面临着要在几周内完成UEFI Opt...

2019-09-13 20:43:42 1844

原创 UEFI开发探索14 – 访问PCI/PCI-E设备2

(请保留-> 作者: 罗冰)(关于PCI访问,其中一些内容来自网上,找不到出处了)PCI规范使用从0CF8H~0CFFH 这8个I/O地址来访问所有设备的PCI配置空间。这8个字节实际上构成了两个32位寄存器:0CF8H寄存器叫做“配置地址寄存器”;0CFCH叫做“配置数据寄存器”。当要访问配置空间的寄存器时,先向地址寄存器写上目标地址,然后就可以从数据寄存器中读写数据了。P...

2019-09-13 20:32:50 2475 3

原创 UEFI开发探索13 – 访问PCI/PCI-E设备1

(请保留-> 作者: 罗冰)我所用的测试卡是PCI-E设备,公司商用的产品也是PCI-E设备。所以,我很早就“被迫”去读那些PCI spec。从软件工程师的角度,我觉得只要解决几个问题就行了,其余的细节不妨碍编程。1) PCI/PCI-E设备是如何定位的,也即程序如何找到设备;2) 系统把它认作什么设备;3) 如何访问设备的内部寄存器(一般要去读...

2019-09-13 20:29:34 7096 2

原创 UEFI开发探索12 – Oprom测试板

(请保留-> 作者: 罗冰)今天拿到了测试板,可以把UEFI Oprom写到硬件里面去了。手有点痒,想写一个程序来试试。测试用的板子非常简单,去除了所有实际的硬件控制元器件,只留下了WCH366和一个128K的ROM。不过按照沁恒电子的资料,WCH366只支持64K的寻址,而且还不能同时寻址,意味着我们只有32K的空间可以写代码。做了十个,足够我折腾很长时间了。图1 测试...

2019-09-13 20:12:18 1381 2

原创 UEFI开发探索11 – 鼠标前传

(请保留-> 作者: 罗冰)这篇博客不是要写鼠标的历史,而是记录在很久以前,在Legacy BIOS下,我写鼠标驱动(BIOS/DOS下运行)的过程。我对底层编写程序,从参加工作的时候就非常着迷。当时接手隔离卡5.0的开发维护,主体产品已经完成,我一直思考:怎么才能让产品和别家的不同呢?介绍下背景知识:隔离卡V5.0是公司第一款采用PCI Oprom开发的产品,插上就可以出界面。...

2019-09-13 20:10:51 759

原创 UEFI开发探索10 – 再论键盘

(请保留-> 作者: 罗冰)坐在旅馆的书桌旁,突然想起一句诗:戍客望边色,思归多苦颜。也许是天气原因,也许是因为出差,心情总是不好。上海的天空,灰蒙蒙的。一眼望去,都是淡墨色的乌云,不沉重,也透不过阳光。窗外的风很柔,茂盛的树叶一动不动。要不是偶尔传来的汽车声音,几乎要怀疑时间都停止了。没有阳光的天气,让人心情比较压抑。UEFI下编写Option ROM,除了图形显示外(...

2019-09-10 22:37:34 1304

原创 UEFI开发探索09 – 图形显示02

(请保留->作者:罗冰)上次对UEFI的图形模式有了一定的了解,根据得到的信息,我准备用1024×768的分辨率来运行程序。这个分辨率我比较熟悉,以前的代码(legacy bios下)可以复用。在Vesa标准中,有多个模式是这个分辨率的(我最常用的是105h)。如图:图1 VESA graphics那么UEFI的这个分辨率对应的是哪个模式呢(UEFI 下的模式索引值为3...

2019-09-10 22:31:55 2161 5

原创 UEFI开发探索08 – PE/COFF

(请保留-> 作者: 罗冰)前几天有人问起我,对UEFI的格式文件的理解。嗯,我基本上快把PE格式忘光光了,那是很多年前,搞反汇编,混看雪学院时搞的事情。当时花了几个月,专门学习软件加密、加壳、扰乱反汇编等等。然后,又花了几周,破解了几个dll,扔给工程师去用,就再也没有接触过了。闲言少叙。既然忘记了,就花点时间去回忆一下吧。上午的会议开完,下午有两个小时空档,找找以前的日志和资...

2019-09-10 22:22:54 1062

原创 UEFI开发探索07 – 关于SMBUS的开发故事

(请保留-> 作者: 罗冰)这篇博客曾经发表在高端调试的论坛上,我把它转移到这里来了。UEFI访问SMBUS设备,是我计划中要写的,这篇就作为其前言吧,其中没有任何与UEFI相关的内容。考虑到它留下了我从Legacy bios的smbus到UEFI的smbus的历程,还是把它放在UEFI探索系列中了。当时的情况,我已经开发完了C850F320上的smbus访问代码(作为smbus d...

2019-09-10 22:21:04 4592

原创 UEFI开发探索06 – 图形显示01

(请保留-> 作者: 罗冰)到了我最喜欢的环节了,图形显示!我曾经写过不少关于图形显示的博客和论文,特别是在Legacy BIOS以及嵌入式设备中的显示。PC的显示一直都遵循着VESA的标准,在底层的访问还是比较一致。虽然在多年的开发中,也在一些主板上出现过奇怪的现象(一次而已。Award某款主板,设置显示模式的时候,花屏。在调用设置显示模式的函数前,多压几次堆栈,问题又消失了。)。...

2019-09-10 22:09:23 2901 2

原创 UEFI开发探索05 – 搭环境遇到了问题

(请保留-> 作者: 罗冰)这两天妻子去阜宁,孩子没有带过去。我只能在陪孩子之外,腾出一点点时间,来搭建UDK2017/UDK2018的编译环境。大部分的时间都在装VS,试了两个版本,VS2013和VS2015。我不知道是不是我的版本有问题,总是不成功。Ubuntu16.04的也没有安装成功,让人颇为恼火。总计来回折腾了12个虚拟机,真是不甘心。下周开始又没有太多时间了,几个案子...

2019-09-10 22:05:23 1570 8

原创 UEFI开发探索04 – 与键盘的互动

(请保留-> 作者: 罗冰)我当年学习UEFI的最终目标是实现UEFI Oprom,写入PCI-E ROM,作为隔离卡的底层软件运行。中间的一个目标是编写UEFI driver/application,与bios一起编译,同样是作为底层软件,与另外一款卡通讯。当时是与联想共同开发了一款安全隔离计算机,中间目标就是为这款产品而设的。最后两个目标都实现了,当年刚做的时候还是比较辛苦的。第...

2019-09-04 11:50:22 3365 1

原创 Foxdisk11-小字库显示汉字2

(请保留 -> 作者:罗冰)刚从大学毕业那会,对操作系统极其入迷,总想搞清楚底层是怎么运行的。其中最感兴趣的是图形的显示,BIOS对硬件的控制等。找了很多资料看,正好公司的一些项目上也需要用到,就这么磕磕碰碰地实现了各种显示的代码。Foxdisk的代码中,Vesa.c和Vesa.h就包含了显示的所有信息。主要是遵循了vesa的标准进行显示,采用C嵌汇编的方式来编写。目前,几乎所有的...

2019-09-03 22:08:34 281

原创 Foxdisk10-小字库显示汉字1

(请保留 -> 作者:罗冰)在以前的博客中曾经讨论过,设计的Foxdisk代码段和数据段总共只能128K。可是随便哪个汉字库轻轻松松都超过了100K,大的有近500K(我设计的时候只用了24×24以及16×16的字模),无论如何是不能包含在程序中的。唯一的办法,是将需要用的汉字字模提取出来,实现小字库的汉字显示。当然,如果改变Foxdisk的设计方法,比如采用很久以前用过的一种技术...

2019-09-03 22:07:02 351

原创 Foxdisk09-工具篇

(请保留 -> 作者:罗冰)题外话,大概是2017年底,开始开发DTU,用来采集光伏逆变器的数据,通过GPRS发送给后端服务器。一个不大的物联网设备,针对客户的需求做了三种不同的形态。采用的是STM32F103C8T6+SIM800C的硬件架构,软件则用FreeRTOS,方便后续的扩展。2018年4月份,国家政策一变,幻想中(计划中)的50K的产品计划也全部泡汤。我写博客前,刚好看...

2019-09-03 22:05:46 206

原创 Foxdisk08-如何调试2

(请保留 -> 作者:罗冰)有段时间一直沉迷于裸机上跑程序,学习怎么让一个操作系统跑起来。使用过VirtualPC(现在被微软收购了),VMware,VirtualBOX,Bochs,最终还是觉得Bochs比较好用。它的最大好处是集合了完整的调试环境,对指令是软件解析的,速度虽然慢,但对程序员来说,一步步看代码是如何执行的,非常契合需求。Bochs的文档非常的完整,使用起来也比较方...

2019-09-03 22:01:22 233

原创 Foxdisk07-如何调试1

(请保留 -> 作者:罗冰)在开发过程中,我主要采用两种方式进行调试,一是使用Debug.exe,通过U盘或者光盘,启动DOS,用debug观察程序是否如想象中的写入硬盘指定区域。在早期的版本中,我也曾经去除了写硬盘以及替换MBR的功能,编译了可以在DOS下运行的Foxdisk,方便自己在DOS下对其进行调试。Debug是个很好的工具,当年开发隔离卡和双网隔离计算机的所有底层代码,均是...

2019-09-03 21:59:18 209

原创 Foxdisk06-启动原理3

(请保留 -> 作者:罗冰)Loader.asm控制权转交给BootEntry后,开始启动Foxdisk的主体代码。BootEntry()函数中,只调用了Foxdisk()函数。BootEntry没有其他作用,只是用来定位的,方便Loader.asm去加载。看代码前,首先熟悉一下将要用到的结构体,定义在Common.h中。图1 数据结构对应图程序中允许安装四个不同的操作系统...

2019-09-03 21:56:36 206

原创 Foxdisk05-启动原理2

(请保留 -> 作者:罗冰)观察Foxdisk3的makefile,可以看到使用的是bcc -ms的编译开关。这是要求编译器采用Samll内存模式进行编译,其特点是栈和数据都在64K以内,Code在另外一个64K内。为什么采用Small方式?主要是我当时设计的时候,没有考虑到后面的各种新的需求,以为代码可以控制在64K内完成;另外,这种模式比较便于汇编和C的混合编写,不用去考虑复杂的数...

2019-09-03 21:44:56 178

原创 Foxdisk04-启动原理1

(请保留 -> 作者:罗冰)我不记得是哪个小品了,赵本山用他的标准铁岭普通话说:“我不想知道它怎么来的,我只想知道它是怎么没的。”对编程而言,“怎么来的”实际上非常重要,不能不了解。Foxdisk的启动过程,在“如何安装1”中已经有了说明,本篇会尽量的把相关的背景知识介绍清楚。有几个关键词:BBS、Legacy BIOS、UEFI、MBR。BBS英特尔、Phoenix和...

2019-09-03 21:42:28 372

原创 Foxdisk03-如何安装2

(请保留 -> 作者:罗冰)整个Foxdisk3.01的代码,是将安装程序和主程序混在一起编译的。安装程序负责将代码拷贝到指定的硬盘区域,包括MBR代码、Foxdisk的启动代码、Foxdisk的资源、Foxdisk的code段和数据段。在“如何安装1”中叙述的foxdisk在硬盘中的映像,都是由它来实现的。混编的好处是,安装程序能够很容易的定位主程序各种段(code、data、s...

2019-09-03 21:29:03 209

原创 Foxdisk02-如何安装1

(请保留 -> 作者:罗冰)Foxdisk是基于BIOS中断或者直接访问硬件的,在设计的时候,第一个需要考虑的问题就是软件如何运行。这个问题很有趣,也是我在早期开发一个小的OS时试图搞清楚的最初的问题。作为介于BIOS和操作系统间的一个小程序,我考虑了两种让Foxdisk运行的方法。其一是依靠硬件,将Foxdisk的引导代码放在PCI ROM或者以Option ROM的形式直接嵌入...

2019-09-03 13:30:59 331

底层开发/LegacyBIOS开发/OptionROM开发 资源

英特尔、Phoenix和康柏公司在1996年联合发布了BIOS引导规约(BIOS Boot Specification),简称BBS(图2)。尽管十几年已经过去了,但是这个规约中的大多数内容至今仍被使用着。 对于底层开发人员来说,BIOS规范、BIOS中断都必须比较清楚。将相关的几个手册汇编在一起,提供给大家使用

2019-09-03

中国TCM的标准(PDF)

这是最近国家发布的TCM的标准,现在很热门的保密话题,看看吧

2009-10-09

微软的秘密(PDF)

讲述了微软项目管理的一些实例和理念。咱中国怎么就出不了这样的公司呢,先学着开始吧

2009-10-09

汉字提取程序

可以提取汉字的程序,主要针对hz16汉字库

2008-04-02

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除