Read BIOS
Autif Khan
autif.mlist at gmail.com
Tue Jul 30 23:04:13 EDT 2013
On Sun, Jun 9, 2013 at 10:24 AM, Satya Prakash Prasad
<satyaprakash.prasad at gmail.com> wrote:
> I am trying to write a code to read BIOS details. Below is the program but I
> believe that I am not reading BIOS details. Can anyone please correct me in
> my understanding:
>
> Note I found that /proc/ioports gives the I/O ports details like:
>
> [root at ioport]# cat /proc/ioports
> 0000-001f : dma1
> 0020-0021 : pic1
> 0040-0043 : timer0
> 0050-0053 : timer1
> ........and so on..................
>
>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/io.h>
> #include <ctype.h>
> #include <string.h>
>
> main(int argc, char *argv[])
> {
> unsigned char c;
> if(argc != 2) {
> printf("-1. Invalid args : usage %s start-end address\n",
> argv[0]);
> exit(-1);
> }
> char * temp = argv[1];
> while(*temp != '\0' && (isxdigit(*temp) || *temp=='-'))
> temp++;
> char * delim = strchr(argv[1], '-');
> if(*temp != '\0' || !delim ) {
> printf("-2. Invalid args : usage %s start-end address\n",
> argv[0]);
> exit(-2);
> }
> *delim = '\0';
> int start = (int)strtol(argv[1], '\0', 16), end =
> (int)strtol(delim+1, '\0', 16), index = 0;
> if(start < 0 || end <= 0 ) {
> printf("-3. Invalid args : usage %s start-end address\n",
> argv[0]);
> exit(-3);
> }
> if(iopl(3) == -1) {
> printf("-4. Unable to set privilege level\n");
> exit(-4);
> }
> if(ioperm(start, end - start, 1) == -1) {
> printf("-5. Unable to set access permission bits\n");
> exit(-5);
> }
> for(index = start ; index <= end ; index ++)
> {
> c = inb(index);
> printf("%X", c);
> }
> ioperm(start, end - start, 0);
> printf("\n");
> }
>
>
> So my program dumps the data in-between the ports assigned for devices:
>
> [root at ioport]# ./a.out 0000-001f
> 01000007D0FFFFFFFFFFFFF0100000
> 7D0FFFFFFFFFFFFF
>
> Please let me know if I am in the right path or not and guide me
> appropriately.
>
Please take a look at source code for dmidecode. I am a newbie myself,
so I do not know much beyond that :-)
More information about the Kernelnewbies
mailing list