Linux驱动程序尝试

时间:2018-08-09 07:58:25

标签: c linux linux-kernel linux-device-driver embedded-linux

我写了一个Linux驱动程序,想读取一块内存。我想用try&catch包装它-以防万一我要访问的内存不可用。

我该如何在C语言中做到这一点?

for(i=0;i<base_address.len/sizeof(unsigned); ++i)
{
    seq_printf(seq, "0x%x ",((const volatile unsigned*)base_address.iobase[i]);
}  

我想保护对此内容的访问- base_address.iobase [i] ,因为我不确定范围中的所有位都可以访问。

2 个答案:

答案 0 :(得分:2)

简短答案-您不

C没有像C ++那样提供try / catch机制。取而代之的是,您需要检查每个调用的结果,并在返回标准C习惯时尽早进行自己的清理。

查看其他驱动程序以遵循模式;不要尝试发明与内核其余部分不同的机制(那样只会导致混乱和痛苦!)。

答案 1 :(得分:0)

事实上,Linux内核中有一个类似try-catch的工具。它称为exception table,可以在Linux源代码的kernel/extable.c中找到。基本上,您使用_ASM_EXTABLE*中定义的arch/x86/include/asm/asm.h宏之一(假设您使用的是x86平台)。

它的工作方式是提供错误的指令-即try部分-和fixup地址-catch部分。 try/catch in Linux Kernel中对此进行了更详细的描述。