uboot傳遞參數到內核
一.uboot添加自定義參數number
在uboot命令行下,我通過setenv bootargs以及saveenv命令來在bootargs參數中添加自己的一個參數,例如:
setenv bootargs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx number=${num}
setenv num 0
saveenv
其中bootargs前面部分省略,number爲在原bootargs後添加的參數,它會去取num的值,因此以後只要修改num的值即可(這裏先設置爲0)
二.kernel讀取uboot傳入的參數number:
在想要取得uboot傳入參數的文件中進行如下操作:
1.添加頭文件:
#include <linux/init.h>
2.添加如下內容:
static unsigned int number;
static int __init number_setup (char *num)
{
number = *num - '0';
}
__setup("number=", number_setup);
宏__setup("number=", number_setup)會在bootargs中取得"number="後的值作爲函數number_setup的參數num,因此只要在number_setup函數中用全局變量number接收該值即可(此處我將傳入的值作爲數字處理)。
GPIO子系統
驅動使用
定義設備樹
gpioled {
#address-cells = <1>;
#size-cells = <1>;
compatible = "atkalpha-gpioled";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_led>;
led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
驅動使用
of_get_named_gpio(leddev.node, "led-gpio", 0);
gpio_request(leddev.led0, "led0");
gpio_direction_output(leddev.led0, 1);
gpio_set_value(leddev.led0, 0);
pinctrl子系統
驅動使用
定義設備樹
&pinctrl@11000000 {
led_demo: led{
samsung,pins = "gpm4-0", "gpm4-1" ,"gpm4-2", "gpm4-3";
samsung,pin-function = <0x1>; //1爲輸出
samsung,pin-pud = <0x0>; //沒有上拉
samsung,pin-drv = <0x0>; //驅動強度?
};
};
led_pin {
compatible = "tiny4412,led_demo";
pinctrl-names = "led_demo";
pinctrl-0 = <&led_demo>;
tiny4412,int_gpio1 = <&gpm4 0 GPIO_ACTIVE_HIGH>;
tiny4412,int_gpio2 = <&gpm4 1 GPIO_ACTIVE_HIGH>;
tiny4412,int_gpio3 = <&gpm4 2 GPIO_ACTIVE_HIGH>;
tiny4412,int_gpio4 = <&gpm4 3 GPIO_ACTIVE_HIGH>;
};
驅動使用
如果 pinctrl-names 爲 “default”,那麼這種功能狀態將設置爲默認的引腳狀態,代碼中無需處理。
pctrl = devm_pinctrl_get(dev);
pstate = pinctrl_lookup_state(pctrl, "led_demo");
pinctrl_select_state(pctrl, pstate);//設置爲輸出模式
printk("enter %s\n",__func__);
led1 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio1", 0);;
led2 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio2", 0);;
led3 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio3", 0);;
led4 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio4", 0);;
devm_gpio_request_one(dev, led1, GPIOF_OUT_INIT_HIGH, "LED1");
devm_gpio_request_one(dev, led2, GPIOF_OUT_INIT_HIGH, "LED2");
devm_gpio_request_one(dev, led3, GPIOF_OUT_INIT_HIGH, "LED3");
devm_gpio_request_one(dev, led4, GPIOF_OUT_INIT_HIGH, "LED4");