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@ioport]# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
#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@ioport]# ./a.out 0000-001f
01000007D0FFFFFFFFFFFFF0100000
Regards,Note I found that /proc/ioports gives the I/O ports details like:
[root@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@ioport]# ./a.out 0000-001f
01000007D0FFFFFFFFFFFFF0100000
7D0FFFFFFFFFFFFF
Please let me know if I am in the right path or not and guide me appropriately.Prakash
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies