从uboot传参数给linux驱动
来源:互联网 发布:ios 阿里百川的云推送 编辑:程序博客网 时间:2024/05/20 23:56
android电视上有个hotel模式,要求有个开关控制开机时是否闪灯,开机闪灯是用linux led驱动做的,控制开关是在hotel模式的菜单中做的,要想用菜单的开关控制开机时是否闪灯,首先想到的做法是:在uboot中添加一个环境变量,因为我们是mstar方案,他们已经做好了一个供java层使用的接口,可以用来设置uboot的环境变量,然后开机在uboot中检测这个环境变量的值,如果存在就把它添加到bootargs参数里面,如果不存在就添加一个这样的变量,这样就可以通过bootargs把自己想要的环境变量传给内核了,驱动中再用__setup函数来处理具体操作,具体代码如下:
uboot部分代码:
char *pInfo = getenv("ledflash");//添加一个环境变量,如果不存在就默认设置它if(pInfo == NULL) { UBOOT_DEBUG("No env 'ledflash'\n"); setenv("ledflash","1"); saveenv(); pInfo = getenv("ledflash");}//根据环境变量的值,在bootargs参数中添加相应的值if(strcmp(pInfo,"1") == 0) { set_bootargs_cfg("ledflash","ledflash=1",0);}else if(strcmp(pInfo,"0") == 0) { set_bootargs_cfg("ledflash","ledflash=0",0);}
led驱动部分代码:
#define LED_GPIO 22extern void MDrv_GPIO_Pull_Low(U8 u8IndexGPIO);extern void MDrv_GPIO_Pull_High(U8 u8IndexGPIO);static bool led_flash_enabled;//判断环境变量值的函数static int __init set_led_flash(char *str) { if (strcmp(str,"1") == 0) { led_flash_enabled = true; return 1; } else if (strcmp(str,"0") == 0) { led_flash_enabled = false; return 0; } }//添加setup函数来获取bootargs传递的参数__setup("ledflash=", set_led_flash);static void mstar_led_brightness_set(struct led_classdev *cdev, enum led_brightness brightness) { if (brightness) { //根据led_flash_enabled的值来决定是否闪灯 if (led_flash_enabled) { MDrv_GPIO_Pull_High(LED_GPIO); } else { MDrv_GPIO_Pull_Low(LED_GPIO); } } else MDrv_GPIO_Pull_Low(LED_GPIO);}static struct led_classdev mstar_led = { .name = "mstarled", .brightness_set = mstar_led_brightness_set, .default_trigger = "heartbeat",};static int __devinit mstar_led_probe(struct platform_device *pdev) { int ret = led_classdev_register(&pdev->dev, &mstar_led); if (ret < 0) { dev_err(&pdev->dev, "led_classdev_register failed\n"); return ret; } return 0;}static int __devexit mstar_led_remove(struct platform_device *pdev) { led_classdev_unregister(&mstar_led); return 0;}static struct platform_driver mstar_led_driver = { .probe = mstar_led_probe, .remove = __devexit_p(mstar_led_remove), .driver = { .name = "Mstar-leds", .owner = THIS_MODULE, },};static int __init mstar_led_init(void) { pr_info("mstar led driver init\n"); return platform_driver_register(&mstar_led_driver);}static void __exit mstar_led_exit(void) { platform_driver_unregister(&mstar_led_driver);}module_init(mstar_led_init);module_exit(mstar_led_exit);MODULE_ALIAS("platform:mstar_device_led");MODULE_LICENSE("GPL");MODULE_DESCRIPTION("User LED support for mstar");MODULE_AUTHOR("RockLee");
剩下就是在菜单中根据开关选项调用接口来设置ledflash这个环境变量了
1 0
- 从uboot传参数给linux驱动
- 从UBOOT向内核驱动传送参数
- uboot给linux传递参数流程
- uboot给Linux传参分析
- uboot中给kernel参数的传递
- 从uboot中学习了一些linux驱动框架的知识
- Uboot--Linux参数传递--ATAG
- 从Uboot到Linux技术
- Linux内核驱动之Uboot(1)环境变量
- Linux内核驱动之Uboot(2)常用命令
- Linux内核移植 part2:uboot lcd驱动
- MIPS架构UBOOT和linux参数传递
- MIPS架构UBOOT和Linux参数传递
- uboot与linux之间参数的传递
- uBoot和Linux的参数传递关系
- uboot与linux的参数传递
- Uboot与Linux之间的参数传递
- uboot传给linux的启动参数
- Matlab变量及其命名规则
- HashSet<String>, HashMap<String, String>, Hashtable<String, String>
- SharePoint 的Discussion List的Discussion Content Type属于Folder 类型,并非是Item类型
- Android UI 设计——EditText 控件
- Hadoop--ZooKeeper
- 从uboot传参数给linux驱动
- Cstring中GetBuffer()方法的主要作用
- hdu1517 A Multiplication Game
- Android_07_有序广播及最终广播接收者
- linux中vi编辑器
- 异步复位、同步释放
- 适配器模式
- DHCP的那些事儿
- Android UI 设计——Button 控件