goto
goto语句也称为无条件转移语句,其一般格式如:
goto 语句标号;
其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加半角冒号“:”。语句标号起标识语句的作用,与 goto 语句配合使用。
static int __init led_init(void) {
int ret;
led_dev = cdev_alloc(); //动态申请一个设备结构体
if(led_dev == NULL) {
goto error;
}
ret = alloc_chrdev_region(&led_dev_num,0,1,"led"); //动态申请一个设备号
if(ret != 0) {
goto error; //转入下方error段落
}
led_dev->owner = THIS_MODULE; //初始化设备管理结构体的 owner 为 THIS_MODULE
led_dev->ops = &led_ops; //初始化设备操作函数指针为 led_ops 函数
cdev_add(led_dev,led_dev_num,1); //将设备添加到内核中
led_class = class_create(THIS_MODULE, "led_class"); //创建一个类
if(led_class == NULL) {
goto error;
}
led0 = device_create(led_class,NULL,led_dev_num,NULL,"led0")
13; //创建一个设备
if(IS_ERR(led0))
{
goto error;
}
gpioe_cfg0 = ioremap(GPIOE_CFG0,4); //将 GPIOE_CFG0 物理地址映射为虚拟地址
gpioe_cfg1 = ioremap(GPIOE_CFG1,4); //将 GPIOE_CFG1 物理地址映射为虚拟地址
gpioe_data = ioremap(GPIOE_DATA,4); //将 GPIOE_DATA 物理地址映射为虚拟地址
gpioe_pul0 = ioremap(GPIOE_PUL0,4); //将 GPIOE_PUL0 物理地址映射为虚拟地址
return 0;
error: //error段落
printk(KERN_WARNING"led_init failed!\n");
return 1; }