对于任何软件开发来说,找对工具是往往是成功的一半。正所谓“工欲善其事必先利其器”啊!尤其是BIOS这种底层的软件工程师,工具往往能让debug起到事半功倍的效果。一般情况,BIOS的debug过程大多数选择在dos下完成,dos下的工具往往也很多:ADU.exe / ru.exe /io5.exe等。
但是很多底层问题不仅仅体现在开机的时候,很多时候会在OS下出现莫名其妙的bug,DOS下的工具也排不上用场。在Windows下有现成的工具RW,但是在Linux下确难以找到类似的工具来协助工程师debug。
后来在解完一个在Linux下的bug之后,痛定思痛,抽时间完成了一个Linux下的读写IO和memory的工具---Abu。
csdn网站资源地址为:http://download.csdn.net/detail/pankul/5076277;
也可以去biosren网站找到:http://www.biosren.com/thread-2864-1-1.html
版本: V0.10
支持系统:Linux(Kernel>=2.6.x)
主要功能:实现Linux下读写memory,IO读写,CPUID读取,Pci寄存器读写等。
使用方法: (请使用root权限)
终端 : # "dir"/abu
注:
1、支持终端模式:25x80.
2、被当前系统占用的物理内存部分不允许读写,Read返回值“FF”
3,Linux下一切修改动作请慎重,对系统产生任何不良影响,后果自负!
4,Abu的使用需要当前系统安装lib-ncurses. 可以通过如下命令查看 rpm -qa|grep ncurses.如果没有,请安装该libary。
例如在redhat6.1上安装ncurses-libs-5.7-3.20090208.el6.i686.rpm
在Ubuntu下使用如下方式安装:sudo apt-get install libncurses5-dev libncursesw5-dev 即可。
关于程序的源码,这里不便提供,基本上只要突破IO的读写权限问题和使用memory映射方式即可实现所有功能。对于底层工程师来说,实现这些底层的IO读写并不是很麻烦的事情,反到是界面的实现稍显麻烦。
该程序通过调用现成的图形库的ncurse库来实现界面的。ncurse是Linux下比较成熟的图形库,可以找到很多优秀的范例和编程手册,这里就不再做非专业的累述。编译的时候记得要加载ncurse库。 这里只贴出一个简单的例程参考。
/*--------------------------------------------------------------
A simple curses color demo program
Coder: jellen
Date: 3-26-2004
-------------------------------------------------------------*/
#include <curses.h>
int main()
{
initscr(); /*初始化屏幕*/
if(start_color() == OK) /*开启颜色*/
{
init_pair(1, COLOR_RED, COLOR_GREEN); /*建立一个颜色对*/
attron(COLOR_PAIR(1)); /*开启字符输出颜色*/
move(LINES/2, COLS/2);
waddstr(stdscr, "Yet another Hello, world!");
attroff(COLOR_PAIR(1)); /*关闭颜色显示*/
refresh();
}
else
{
waddstr(stdscr, "Can not init color");
refresh();
}
endwin(); /*关闭curses状态*/
return 0;
}
这个程序假如保存为demo.c
那么你可以这样编译了: gcc -o demo demo.c -lcurses
比如我编译调试工具abu为: gcc -o abu abu.c -lcurses。
关于abu的使用。abu目前的版本只有五个菜单,使用起来很简单,如下图。
功能包括memory、IO 读写、PCI scan、Smbus 读写、cpuID等。
如果要调试memory部分,选中memory部分回车即可,如下图。