15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

分类标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

分类归档 UBOOT

【buildroot】增加local.mk编译自定义kernel,uboot

1.make menuconfig

添加local选择local.mk文件

前提:已经打开linux 和 uboot 编译,但是寻找资源文件夹的时候优先找local.mk

添加内核编译:
注意:添加deconfigs的时候,文件名字最后的_defconfig去掉

Kernel->Linux Kernel 并且在linux目录下arch/arm/configs将自己的配置文件名字添加到下方

Bootloaders->U-Boot

错误信息:是因为没有添加配置文件 配置文件是在uboot文件夹下configs

boot/uboot/uboot.mk:416: *** No board defconfig name specified, check your BR2_TARGET_UBOOT_BOARD_DEFCONFIG setting. Stop.
Makefile:84: recipe for target ‘_all’ failed
make: *** [_all] Error 2

BR2_TARGET_UBOOT_BOARD_DEFCONFIG

2.buildroot目录下创建local.mk文件

local.mk文件内容添加编译文件夹路径

其中宏BASE_DIR是buildroot/output 输出的目录,

    添加uboot文件夹:

    UBOOT_OVERRIDE_SRCDIR =

    添加linux文件夹

    LINUX_OVERRIDE_SRCDIR=

    添加busybox文件夹:

    BUSYBOX_OVERRIDE_SRCDIR  =

【uboot】去掉启动logo显示

一、确定logo存放位置

这里面都是各种芯片厂家的logo图片,如果想显示logo,最简单的方案就是同名替换。

二、确定logo显示函数

既然我们知道了logo存放位置,那是否可以直接删除可以不,答案是可以的,但是比较麻烦,因为代码设计的不完善性导致模块化失调,没法直接关闭logo文件检测的逻辑。需要修改地方比较多。退而求其次,干脆干掉显示函数。

三、去掉版本显示信息

去掉logo后,你会发现还有一行小的字,那就是版本显示信息,同样的方案干掉函数。可以直接顶一个宏定义CONFIG_HIDE_LOGO_VERSION

【uboot】通过uboot指令实现GPIO控制

一:在uboot下的defconfig 打开如下配置

CONFIG_DM=y
CONFIG_DM_GPIO=y
CONFIG_DWAPB_GPIO=y
CONFIG_CMD_GPIO=y

二:重新编译u-boot后会生成cmd:gpio

(板子上电时连续按回车键)进入到板端uboot cmdline下执行” gpio status -a ” 查看板端对应的gpio numbe

三:利用 uboot gpio 命令操作GPIO 做测试

  • gpio c 0 ; 将第0根PIN清零(拉低)
  • gpio s 0 ; 将第0根PIN设为output同时拉高

四:gpio 操作demo

直接以下demo code添加到uboot/cmd路径下,再在uboot/cmd/Makefile中添加编译选项,编译完成后可以直接操作gpio

#include <command.h>
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <asm/gpio.h>

int do_gpio_test(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
{
    if (argc < 2) {
        printf("usage: gpio_test [requ/out/on/off]\n");
        return 0;
    }

    if (strcmp("requ", argv[1]) == 0) {
        gpio_request(126, "ir_a");
        gpio_request(127, "ir_b");
        mdelay(10);
    } else if (strcmp("out", argv[1]) == 0) {
        gpio_direction_output(126, 1);
        gpio_direction_output(127, 1);
        mdelay(10);
    } else if (strcmp("on", argv[1]) == 0) {
        gpio_set_value(126, 0);
        gpio_set_value(127, 1);
        mdelay(100);
        gpio_set_value(126, 1);
        gpio_set_value(127, 1);
    } else if (strcmp("off", argv[1]) == 0) {
        gpio_set_value(126, 1);
        gpio_set_value(127, 0);
        mdelay(100);
        gpio_set_value(126, 1);
        gpio_set_value(127, 1);
    }

    return 0;
}

U_BOOT_CMD(
    gpio_test, 4, 1, do_gpio_test,
    "u-boot gpio cmd test",
    "gpio - just for test\n"
);

五、测试

编译完成升级后,进入到uboot会有gpio_test命令
gpio_test requ
初始化gpio
gpio_test out
设置gpio direction
gpio_test on
设置 ir_cur (的两根PIN) 状态