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.

分类归档 MCU/MPU/GPU

[f1c100s/f1c200s]u-boot 添加LED驱动

UBOOT版本:2018.01

实验目标:u-boot启动后点亮3个led灯
u-boot启动过程中会调用crt0.S汇编代码,在该汇编代码中点亮LED.

LED对于引脚如下:
REG –GPE4
GREEN – GPE5
YELLOW – GPE6

1、GPIO驱动实现
u-boot的驱动程序都放在drivers目录下。
LED驱动属于GPIO驱动。
所以led驱动应该写在drivers\gpio目录下,下面是已经实现的sunxi_gpio.c驱动。

详细代码可查阅:u-boot-nano-v2018.01\drivers\gpio\sunxi_gpio.c

sunxi_gpio.c里的函数在u-boot-nano-v2018.01/include/asm-generic/gpio.h头文件中被声明。

2、LED驱动实现,这部前需要先实现上面的GPIO驱动

在board目录下添加led.c,代码如下

#include <common.h>
#include <asm/io.h>
#include <asm/arch/gpio.h>
#include <status_led.h>
#include <asm-generic/gpio.h>  /*下面函数在这个头文件中声明*/
//int gpio_direction_output(unsigned gpio, int value);
//初始化 LED(PE4、PE5、PE6)
void coloured_LED_init(void)
{
	/* Clock is enabled in board_early_init_f() */
	//gpio_direction_output函数在u-boot-nano-v2018.01\drivers\gpio\sunxi_gpio.c中实现,这里直接调用就可以了
	gpio_direction_output(CONFIG_RED_LED, 0);
	gpio_direction_output(CONFIG_GREEN_LED, 0);
	gpio_direction_output(CONFIG_YELLOW_LED, 0);


}


#ifdef CONFIG_RED_LED
void red_led_on(void)
{
	gpio_set_value(CONFIG_RED_LED, 1);
}

void red_led_off(void)
{
	gpio_set_value(CONFIG_RED_LED, 0);
}
#endif

#ifdef CONFIG_GREEN_LED
void green_led_on(void)
{
	gpio_set_value(CONFIG_GREEN_LED, 1);
}

void green_led_off(void)
{
	gpio_set_value(CONFIG_GREEN_LED, 0);
}
#endif

#ifdef CONFIG_YELLOW_LED
void yellow_led_on(void)
{
	gpio_set_value(CONFIG_YELLOW_LED,1);
}

void yellow_led_off(void)
{
	gpio_set_value(CONFIG_YELLOW_LED, 0);
}
#endif

注意:#include <asm-generic/gpio.h> 头文件不能少。

然后编辑led.c同目录下的Makefile文件,把led.o编译进去。
Makefile中添加如下一行:

obj-$(CONFIG_SUNXI_LED )  += led.o

3、配置声明
在include/configs/suniv.h中添加如下声明。

#define CONFIG_SUNXI_LED 1		/*开启LED支持*/
#define CONFIG_RED_LED  132	    /*PGE4*/
#define CONFIG_GREEN_LED  133	/*PGE5*/
#define CONFIG_YELLOW_LED  134	/*PGE6*/

4、在crt0.S汇编代码中点亮LED
在crt0.S中调用以下函数点亮3个led灯:

bl coloured_LED_init
bl red_led_on
bl green_led_on
bl yellow_led_on

5、编译下载:

cd “你的uboot目录”
# 编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
# usb下载u-boot目标板
sunxi-fel uboot ./u-boot-sunxi-with-spl.bin  

[f1c100s/f1c200s]uboot编译 sh: 1: python: not found ,cripts/dtc/pylibfdt/_libfdt.so’ failed解决

1、问题分析

根据报错打印提示可以很容易定位python not found,也就是说找不到python软件或者库。用下面指令查看下到底是不是python安装问题:

ls -l /usr/bin/python*

-rwxr-xr-x 1 root root 3637096 Nov  7 18:07 /usr/bin/python2.7
lrwxrwxrwx 1 root root       9 Oct 25  2018 /usr/bin/python3 -> python3.6
-rwxr-xr-x 2 root root 4526456 Nov  7 18:44 /usr/bin/python3.6
lrwxrwxrwx 1 root root      33 Nov  7 18:44 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4526456 Nov  7 18:44 /usr/bin/python3.6m
lrwxrwxrwx 1 root root      34 Nov  7 18:44 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
lrwxrwxrwx 1 root root      16 Oct 25  2018 /usr/bin/python3-config -> python3.6-config
-rwxr-xr-x 1 root root    1018 Oct 29  2017 /usr/bin/python3-jsondiff
-rwxr-xr-x 1 root root    3661 Oct 29  2017 /usr/bin/python3-jsonpatch
-rwxr-xr-x 1 root root    1342 May  2  2016 /usr/bin/python3-jsonpointer
-rwxr-xr-x 1 root root     398 Nov 16  2017 /usr/bin/python3-jsonschema
lrwxrwxrwx 1 root root      10 Oct 25  2018 /usr/bin/python3m -> python3.6m
lrwxrwxrwx 1 root root      17 Oct 25  2018 /usr/bin/python3m-config -> python3.6m-config

这也太奇怪了,明明是安装了python,并且是python2和python3都安装了,大家有没有注意到提示名字的不带数字,那可能是连接名字问题。

2、解决方式

sudo ln -s /usr/bin/python2.7 /usr/bin/python

pkg_hash_fetch_best_installation_candidate: Packages for python found, but incompatible with the architectures configured

Unknown package ‘python’.
Collected errors:

* pkg_hash_fetch_best_installation_candidate: Packages for python found, but incompatible with the architectures configured
* opkg_install_cmd: Cannot install package python.

在安装Python的时候提示这种错误让我很奇怪,因为这个ipk安装包是我在固件下编译生成的,怎么会架构不符合呢。

百思不得。问了好多人,觉得莫名其妙。后来想想,这个是跟源有关啊。

解决方法:

python_2.7.15-1_mipsel_24kc.ipk

根据IPK包,在OPKG.CONF添加相应的软件安装架构。

//指令
vim /etc/opkg.conf

修改如下图:

 

OpenWRT-dist

目录列表:

目录 简介
chinadns-c 无需服务器的反 DNS 污染方案 – @GitHub
dnsmasq 添加了 ChinaDNS 功能的 Dnsmasq – @GitHub
shadowsocks-libev 添加了 ss-rules, 国内流量不走代理 – @GitHub
depends-libs 提供相应的依赖包下载

架构列表:

架构 CPU型号
ar71xx AR7xxx/AR9xxx/QCA9xxx
atheros AR231x/AR5xxx
bcm53xx BCM47xx/53xx (ARM CPU)
brcm47xx BCM47xx/53xx (MIPS)
brcm63xx BCM63xx
ramips_24kec RT3x5x/RT5350/MT7620a/MT7620n/MT7621

安装说明:

注: 下文中 packagename 和 initname 请根据实际情况修改

  • 自动安装
    1. 将下载的IPK上传至路由器, 或者直接在路由器使用 wget 下载;
    2. SSH 登录到路由器, 使用 opkg install {packagename}.ipk 安装;
    3. 修改配置文件后使用 /etc/init.d/{initname} start 命令启动.

    当架构不兼容时会提示 but incompatible with the architectures configured,
    此种情况一般在 ramips_24kec 架构的软件包安装时出现.
    可以通过编辑 /etc/opkg.conf 调整架构支持,
    在文件末尾添加(也可以在 LuCI 设置页面修改):

    arch all 100
    arch ramips 200
    arch ramips_24kec 300

    添加完成后使用 opkg update 更新一次
    再次使用 opkg install {packagename}.ipk 安装

  • 手动安装
    1. 解压 ipk 包: tar xzf {packagename}.ipk
    2. 解压 data 包完成最终安装: tar xzf data.tar.gz -C /
    3. 删除安装包残留: rm {packagename}.ipk control.tar.gz data.tar.gz debian-binary

    注: 上面 3 条命令注意复制完整并替换 packagename
    手动安装后没有卸载信息, 建议只在自动安装失败时使用
    如需要卸载, 可以直接删除步骤 2 中解压出的文件