网络子系统4_以太网设备描述符

//分配以太网设备描述符
1.1 struct net_device *alloc_etherdev(int sizeof_priv)
{
	//设备名默认为eth%d,其中%d随系统中以太网络设备数递增
	return alloc_netdev(sizeof_priv, "eth%d", ether_setup);
}

//网络设备描述符标准分配函数
//	alloc_etherdev->alloc_netdev
1.2 struct net_device *alloc_netdev(int sizeof_priv, const char *name,
		void (*setup)(struct net_device *))
{
	void *p;
	struct net_device *dev;
	int alloc_size;

	//对齐到32bit
	alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST;
	alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;

	//kmalloc物理内存上连续
	p = kmalloc(alloc_size, GFP_KERNEL);
	if (!p) {
		printk(KERN_ERR "alloc_dev: Unable to allocate device.\n");
		return NULL;
	}
	memset(p, 0, alloc_size);

	dev = (struct net_device *)
		(((long)p + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST);
	//在padded中保存为对齐dev到32bit浪费的字节数
	//dev-padded即可找到kmalloc分配的内存起始地址
	dev->padded = (char *)dev - (char *)p;

	if (sizeof_priv)
		dev
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值