0 Preface
MT72628K integrates multi-port ethernet switch, but in our project we don't use it, we only use apcli function.

1 Build
1.1 eCos编译
1)
apt-get install dos2unix
tar -jxvf 2016_0905_eCos_SDK_V3.1.4.0_DPA.tar.bz2

2)
cd eCos_SDK
make clean; make

3)
eCos.img is produced in the “ra305x_ap_adv/ra305x_router”directory

4)
make module_clean; make module

1.2 eCos make menuconfig
执行make menuconfig时会产生一个ra305x_ap_adv/ra305x_router/include/autoconf.h文件,由于很多用户一般不会用make menuconfig来做配置,那么可以直接修改该文件添加需要的模块。

1.3 APP自定义一个目录
in ra305x_ap_adv/ra305x_router/oem_iot
包含include、Makefile、src

in ra305x_ap_adv/ra305x_router/Makefile
[…]
# oem-begin
APPSUBDIRS += oem_iot
# oem-end
[…]

2 eCos APP自定义section
1)
in ra305x_ap_adv/ra305x_router/arch/mips/target.ld
in ra305x_ap_adv/ra305x_router/target.ld
SECTIONS
{
    [...]
    .text ALIGN (0x4) :
    {
        [...]

. = ALIGN(4);
        PROVIDE (__core_initcall = .);
        KEEP(*(.core.initcall))
        PROVIDE (__core_initcall_end = .);

. = ALIGN(4);
        PROVIDE (__module_initcall = .);
        KEEP(*(.module.initcall))
        PROVIDE (__module_initcall_end = .);

. = ALIGN(4);
        PROVIDE (__late_initcall = .);
        KEEP(*(.late.initcall))
        PROVIDE (__late_initcall_end = .);

[...]
    } > ram =0
    [...]
}

2)
in ra305x_ap_adv/ra305x_router/oem_iot/include/oem_portmisc.h
[…]
typedef void (*initcall_t)(void);

extern initcall_t __core_initcall[];
extern initcall_t __core_initcall_end[];

extern initcall_t __module_initcall[];
extern initcall_t __module_initcall_end[];

extern initcall_t __late_initcall[];
extern initcall_t __late_initcall_end[];

#if 1
#define core_initcall(fn)               \
    static initcall_t __initcall_##fn   \
__attribute__((used,section(".core.initcall"))) = fn

#define module_init(fn)                 \
    static initcall_t __initcall_##fn   \
__attribute__((used,section(".module.initcall"))) = fn

#define late_initcall(fn)               \
    static initcall_t __initcall_##fn   \
__attribute__((used,section(".late.initcall"))) = fn
#else
#define core_initcall(fn)               \
    void fn(void) __attribute__((unused))
#define module_init(fn)                 \
    void fn(void) __attribute__((unused))
#define late_initcall(fn)               \
    void fn(void) __attribute__((unused))
#endif
[…]

3)
in ra305x_ap_adv/ra305x_router/init/main.c
/* oem-begin */
#include "../oem_iot/include/oem_portmisc.h"
/* oem-end */

static void section_core_init(void)
{
    initcall_t *initcall;

for (initcall = __core_initcall;
            initcall < __core_initcall_end;
            initcall++) {
        (*initcall)();
    }
}

static void section_module_init(void)
{
    initcall_t *initcall;

for (initcall = __module_initcall;
            initcall < __module_initcall_end;
            initcall++) {
        (*initcall)();
    }
}

static void section_late_init(void)
{
    initcall_t *initcall;

for (initcall = __late_initcall;
            initcall < __late_initcall_end;
            initcall++) {
        (*initcall)();
    }
}

3 eCos标准驱动框架
1)驱动路径
in packages/devs/serial/mips/vrc437x

2)修改ecos.db,将驱动编译进静态库
in packages/ecos.db
package CYGPKG_IO_SERIAL_MIPS_VRC437X {
    alias         { "VRC437X serial device drivers"
                        devs_serial_mips_vrc437x
                        vrc437x_serial_driver }
    hardware
    directory      devs/serial/mips/vrc437x
    script           ser_mips_vrc437x.cdl
    description   "VRC437X serial device drivers"
}

3)中断处理头文件
#include <cyg/hal/hal_intr.h>
#include <cyg/hal/drv_api.h>

4 eCos API
4.1 线程同步
Mailbox(cyg_mbox_create)
Mailbox的结构是一个FIFO类型的循环队列,存储的是指针。

4.2 CFG API
static void api_usage_test(void)
{
        cyg_uint64 c_time;
        char line[8];
        unsigned long tv_sec, tv_usec;

c_time = cyg_current_time();
        tv_sec = (u_long)(c_time/100);
        tv_usec = (((u_long)ctime)%100) * 10000;
        diag_printf("tv_sec: %ld, tv_usec: %ld\n",
                tv_sec, tv_usec);

// interface_config();
        CFG_get_str(CFG_SYS_OPMODE, line);
        diag_printf("opmode: %d\n",
                strtol(line, NULL, 10));

CFG_reset_default();
        //mon_snd_cmd(MON_CMD_REBOOT);
}

4.3 打印UTC时间
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif

// time_t gmt_translate2localtime(time_t gmt_time)
// struct tm *gmtime(const time_t *timep)
/* 将时间结构体struct tm的值转化为经过的秒数 */
// time_t mktime(struct tm *tm)
/* translate " DD-mth-YY HH:MM:SS GMT" to elapsed seconds */
// time_t tdate_parse( char* str)
API void get_now_time(void)
{
    struct timespec time;
    struct tm nowtime;

//获取相对于1970到现在的秒数
    clock_gettime(CLOCK_REALTIME, &time);
    localtime_r(&time.tv_sec, &nowtime);
    diag_printf(
            "%04d%02d%02d%02d:%02d:%02d\n",
            nowtime.tm_year + 1900,
            nowtime.tm_mon + 1,
            nowtime.tm_mday,
            nowtime.tm_hour,
            nowtime.tm_min,
            nowtime.tm_sec);
}

5 eCos写MAC地址
ra0的MAC是读取0x0004、0x0006和0x0008三个寄存器。
假设MAC地址:00:0C:43:76:20:58
用USB2UART线进入eCos命令行后。
cd net
iwpriv ra0 e2p 04=0C00
iwpriv ra0 e2p 06=7643
iwpriv ra0 e2p 08=5820

MT7628K eCos开发入门相关推荐

  1. Hololens Unity 开发入门 之 Hello HoloLens

    Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要记录 HoloLens Unity 开发入门 ~ 一.说在前面的话 Unity 对 VR AR 甚至 将来的 MR ...

  2. 【Arduino】开发入门教程【一】什么是Arduino

    Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...

  3. unity开发入门_Unity游戏开发终极入门指南

    unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...

  4. 《iOS 8应用开发入门经典(第6版)》——第1章,第1.6节小结

    本节书摘来自异步社区<iOS 8应用开发入门经典(第6版)>一书中的第1章,第1.6节小结,作者 [美]John Ray(约翰 雷),更多章节内容可以访问云栖社区"异步社区&qu ...

  5. openresty 前端开发入门五之Mysql篇

    2019独角兽企业重金招聘Python工程师标准>>> openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysq ...

  6. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

    <Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...

  7. 《SAP FIORI 开发入门》课程答疑 第二期

    课程上线已经一个星期,本人也接到了同学们提出的一些问题.在这里把典型的问题的回答重新整理一下,帮助后来的同学. 再次放上课程的连接: SAP FIORI开发入门 希望老师能够再放开一章免费的课程. 已 ...

  8. JSP WEB开发入门基础到高手进阶教程002

    JSP WEB开发入门基础到高手进阶教程 -------开发入门 JSP与微软的Active Server Pages 兼容,但它是使用类似HTML的卷标以及Java程序代码段而不是VBScript. ...

  9. 5G 时代的 Android App 开发入门与项目实战

    随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑.智能电视.车载大屏.智能家居.智能手表等诸多设备,Android开发依然是前景可期的IT岗位. 当然,整个社会正在迈向5G时代 ...

最新文章

  1. 【阿圆实验】Consul HA 高可用方案
  2. 在centos7中如何搭建局域网yum源仓库
  3. SQL语言之DDL语言学习-----数据定义语言学习
  4. 《Java 核心技术卷1 第10版》学习笔记------ Object类的 hashCode 方法
  5. 【Python】斐波那契数列
  6. (转)淘淘商城系列——VMware添加已配置好的虚拟机
  7. Python图像处理模块pillow子模块Image用法精要
  8. mockito单元测试示例_Mockito模拟示例
  9. Facebook开发地面技术扩大互联网连接
  10. Ubuntu 批量修改图片大小
  11. 迭代时移除List中的元素的正确方式
  12. 关于我在(PTA)程序设计类实验辅助教学平台的重修经历
  13. 无线路由器的AP、Client、WDS、WISP使用功能图解(清晰明了)
  14. 【OpenGL】OpenGL帧缓存对象(FBO:Frame Buffer Object)
  15. 【雷达与对抗】【2011.07】穿墙超宽带雷达成像
  16. 【实用软件】二维码批量解析软件v1.0
  17. 成都榆熙:拼多多产地直发模式如何解决了流通环节多的问题?
  18. 汉字转换为拼音Java工具类
  19. spine 动态换皮功能
  20. 计算机系统声音出不来怎么办,电脑没声音了如何恢复_电脑突然没声音的解决教程...

热门文章

  1. uniapp使用第三方字体
  2. css锚点定位不准确问题
  3. js后代选择器_jQuery后代选择器用法实例
  4. 常用的表情和含义 各种笑脸;-)
  5. 基于AM5728的OpenCL例程开发分享
  6. 《点燃我,温暖你》爱心代码复现
  7. linux输入法怎么关闭,关于Ubuntu 7.10的缺省输入法Xim
  8. SCPC :普普通通的DP(位运算)
  9. 推荐一款在线免费共享云桌面
  10. 首批5G手机概念热炒,但你真的敢用?