|

楼主 |
发表于 2003-10-17 10:53:19
|
显示全部楼层
无双你好,我是在linux内核里面编程,没办法使用sscanf
dev_addr在linux内核中/usr/src/linux/include/linux/netdevice.h文件233行,是很大的一个结构.
struct net_device
{
unsigned char dev_addr[MAX_ADDR_LEN];
}
我只列出了这一个成员,因为net_device结构太大了.
在我的驱动里面定义了struct net_device *dev
因为我用的开发板不是x86结构,是samsung的s3c2410处理器,上面的网卡cs8900a是没有使用eeprom来存放mac地址,这样我的开发板就没有mac地址,而我现在想的是让linux启动时,我可以传给内核一个参数mac=00:00:c0:ee:ee:ee, 内核接收到之后,用接收到的这个字符串来替换驱动中的dev_addr结构,
(开发板中的mac地址原本是写死在驱动中的
dev->dev_addr[0] = 0x00;
dev->dev_addr[1] = 0x00;
dev->dev_addr[2] = 0xc0;
dev->dev_addr[3] = 0xff;
dev->dev_addr[4] = 0xee;
dev->dev_addr[5] = 0x08;
我想从内核启动参数中接收到00:00:c0:ee:ee:ee,替换掉上面的那些dev_dev_addr来实现手工修改mac地址,但是不知怎么样才能把接收到的字符串中的00:00:c0:ee:ee:ee分解成0x00,0x00,0xc0,0xee,0xee,0xee来赋值给dev_addr.
问题是怎么才能把如'00, 00, c0, ee, ee, ee"这样的字符串分解成0x00,0x00,0xc0,0xc0,0xee,0xee,0xee这个的十六进制数值并分别把值赋值给dev->dev_addr[x]这个字符数组?
dev->dev_addr[0] = 0x00;
dev->dev_addr[1] = 0x00;
dev->dev_addr[2] = 0xc0;
dev->dev_addr[3] = 0xee;
dev->dev_addr[4] = 0xee;
dev->dev_addr[5] = 0xee;
谢谢你! |
|