项目中实际用到的Linux知识点整理

本文整理了项目中实用的Linux知识点,涉及网卡驱动、NCSI、资源保护(自旋锁、原子操作、信号量)、内核定时器、线程与进程互斥通信、中断处理、安装包格式、非阻塞IO、信号以及常用系统函数,是嵌入式开发者的进阶参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网卡驱动相关

几个重要的结构体

struct net_device_ops {
}
struct net_device {
}
struct sk_buff {
}

几个重要的函数

netif_napi_add()
platform_set_drvdata()
platform_get_resource()
register_netdev()

NCSI相关

共享资源的保护

自旋锁

int spin_lock_init(spinlock_t *lock);		//自旋锁初始化
void spin_lock(spinlock_t *lock);			//获取自旋锁
void spin_unlock(spinlock_t *lock);		//释放自旋锁
int spin_trylock(spinlock_t *lock);		//获取自旋锁,没有获取到则返回0。
int spin_is_locked(spinlock_t *lock);	//检查自旋锁是否已被获取,返回0则已被获取,其他值未被获取。
void spin_lock_irq(spinlock_t *lock);	//禁止本地中断,并获取自旋锁。
void spin_unlock_irq(spinlock_t *lock);	//恢复本地中断,并释放自旋锁。
void spin_lock_irqsave(spinlock_t *lock, unsigned long flags);		//保存中断状态,禁用本地中断,并获取自旋锁,flags为中断状态。
void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);	//恢复中断至保存的状态,恢复本地中断,并释放自旋锁。

原子操作

#include <linux/types.h>		//原子变量结构体头文件
typedef struct{
	int counter;
} atomic_t;			//原子变量结构体的定义
atomic_t a = ATOMIC_INIT(x);	//定义原子变量
int atomic_read(atomic_t *v);		//读取v并且返回。
void atomic_set(atomic *v, int i);	//把i写入v。
void atomic_add(int i, atomic_t *v);		//v的值加上i。
void atomic_sub(int i, atomic_t *v);		//v的值减去i。
void atomic_inc(atomic_t *v);				//v自增
void atomic_dec(atomic_t *v);				//v自减
int atomic_inc_return(atomic_t *v);		//v自增并返回
int atomic_dec_return(atomic_t *v);	//v自减并返回

信号量

#include <semaphore.h>	//头文件
struct semaphore{
	raw_spinlock_t lock;
	unsigned int count;
	struct list_head wait_list;
};	//信号量结构体
void sema_init(struct semaphore *sem, int val);		//初始化信号量,设置信号值(同时访问个数)为val。
void down(struct semaphore *sem);						//获取信号量,失败时会进入休眠,且不可以被信号打断,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jimbo_Zhang

有钱的捧个钱场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值