dm3730之支持Peripheral 启动系统

开发板:DM3730
虚拟机:ubuntu 14.04
编译器:arm-none-linux-gnueabi
uboot:U-Boot 2010.06-00166-gbf92a97
开发板内核:Linux-2.6.37
文件系统:ext3

一般芯片的启动机制都在芯片手册上有讲解 比如我这款a8的dm3730的启动机制大致如下
romcode->x-load(MLO)->u-boot.bin->uImage->rootfs
u-boot我选择的是用uart的方式启动 因为usb启动的话需要usb是host并且满足一下的协议才能发送相应的image
这里写图片描述
uart启动uboot的协议如上
具体的ASCI ID
这里写图片描述
先是ROMCODE发送ASIC ID给host 然后host接受到后就发送Boot message 和size of image ,image
协议看似复杂 其实用工具就可以实现 我们可以使用两个tools就是peserial,ukermit
使用方法是 调好sys_boot[4:0]然后上电下载就好了

也可以自行去分析在pserial和ukermit里怎么实现传输文件的 在这里简单的分析下pserial协议下载

//pserial.c
int main(int argc, char **argv)
{
    signed char ret = 0;
    unsigned char buff[MAX_BUF];
    /* 0xF0030002表示继续从uart或者usb启动 */
    unsigned int download_command = 0xF0030002;
    char *port = NULL;
    char *second_file = NULL;
    char *appname = argv[0];
    int c;
    int read_size = 0;
    unsigned int asic_id = 0;
    char verbose = 0;
    /* Option validation */
    opterr = 0;
    /* 分析参数 给相关的变量赋值 */
    while ((c = getopt(argc, argv, PORT_ARG ":" SEC_ARG ":" VERBOSE_ARG)) !=
            -1)
        switch (c) {
        case VERBOSE_ARG_C:
            verbose = 1;
            break;
        case PORT_ARG_C:
            port = optarg;
            break;
        case SEC_ARG_C:
            second_file = optarg;
            break;
        case '?':
            if ((optopt == SEC_ARG_C) || (optopt == PORT_ARG_C)) {
                APP_ERROR("Option -%c requires an argument.\n",
                      optopt)
            } else if (isprint(optopt)) {
                APP_ERROR("Unknown option `-%c'.\n", optopt)
            } else {
                APP_ERROR("Unknown option character `\\x%x'.\n",
                      optopt)
            }
            usage(appname);
            return 1;
        default:
            abort();
        }
    if ((port == NULL) || (second_file == NULL)) {
        APP_ERROR("Error: Not Enough Args\n")
            usage(appname);
        return -1;
    }
    /* 打开端口 也就是/dev/ttyUSB0等 */
    /* Setup the port */
    ret = s_open(port);
    if (ret != SERIAL_OK) {
        APP_ERROR("serial open failed\n")
            return ret;
    }
    /* 根据uart需求来配置端口 这里设置115200 偶校验 等 */
    ret = s_configure(115200
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值