liteos 从入门到放弃
这两天收到一份sdk,hisi 3516cv200 liteos的sdk
正好手头有硬件,就随便编译玩玩.
解压sdk.
Hi3518E_SDK_V5.0.5.0
- ll@ubuntu:~/work2016/liteos/Hi3518E_SDK_V5.0.5.$ ls -lh
- total 32K
- drwxrwxr-x ll ll .0K Oct : drv
- drwxrwxr-x ll ll .0K Oct : mpp
- drwxrwxr-x ll ll .0K Oct : osal
- drwxrwxr-x ll ll .0K Feb : osdrv
- drwxrwxr-x ll ll .0K Oct : package
- drwxrwxr-x ll ll .0K Oct : scripts
- -rwxrwxr-x ll ll Oct : sdk.cleanup
- -rwxrwxr-x ll ll .2K Oct : sdk.unpack
和其他版本sdk也没什么区别.
1.安装交叉编译工具
交叉工具在osdrv/toolchain 和以前版本没有区别,
- ll@ubuntu:~/work2016/liteos/Hi3518E_SDK_V5.0.5.0/osdrv/toolchain$ ls -lh
- total 273M
- -rwxrwxr-x 1 ll ll 1.9K Oct 25 19:16 arm-hisiv500-linux.install
- -rw-rw-r-- 1 ll ll 273M Oct 25 19:16 arm-hisiv500-linux.tar.bz2
2.目录结构和以前sdk版本没有区别,唯一的区别就多了一个liteos 目录,这个目录就是liteos 内核所在目录
- ll@ubuntu:~/work2016/liteos/Hi3518E_SDK_V5.0.5./osdrv/opensource$ ls -lh
- total .0K
- drwxrwxr-x ll ll .0K Feb : liteos
- drwxrwxr-x ll ll .0K Feb : u-boot
3.编译整个系统,具体的请参考01.software\board\document_cn\Hi35xx Huawei LiteOS开发环境用户指南.pdf 这个文档
统一编译。用户需要在开发包解压根目录下输入:“ make”。 make 工具将会根据当
前 Makefile 设置编译进行统一编译,统一编译结果将在 pub 目录下得到两个目录
boot 与 tools。两者分别保存 U-boot 镜像与文件系统镜像制作工具。由统一编译
生成的 U-boot 镜像可直接用于烧写到单板,文件系统镜像工具可用于制作 yaffs
与 jffs2 文件系统镜像,具体使用可参考本文档 4.2.3 挂载文件系统镜像。
因为makefile都配置好了,直接make就可以了..编译整个sdk相当快,因为liteos是假开源,都是给的.a文件.都没有源代码...
4.编译boot,这个有其他sdk版本uboot没区别.可以共用.
5.编译sample.liteos 版本和linux版本的mpp基本一样,还有流程都没区别...我这儿编个venc玩玩.
- ll@ubuntu:~/work2016/liteos/Hi3518E_SDK_V5.0.5./mpp/sample/venc$ ls -lh
- total 12M
- -rw-rw-r-- ll ll Oct : Makefile
- -rwxrwxr-x ll ll 4.3M Feb : sample_venc
- -rwxrwxr-x ll ll 3.5M Feb : sample_venc.bin
- -rw-rw-r-- ll ll 47K Oct : sample_venc.c
- -rw-rw-r-- ll ll 3.7M Feb : sample_venc.map
- -rw-rw-r-- ll ll 40K Feb : sample_venc.o
- sample_venc.bin 就是编译出来的程序,有4.3M,这个程序可以理解为linux的kernel+rootfs+venc所有的功能..uboot起来后直接加载这个玩意就可以跑venc这个app了.
- 6.烧写uboot.直接用hiburn工具搞进去.uboot sdk下已经自带了.也可以自己编译,编译流程和以前版本sdk基本没区别.
- 7.烧写sample_venc.bin 可以用网络,因为我这没有以太网接口,也只能用hiburn+com,烧写在1M开始的地方.
8.修改bootargs.
- hisilicon # printenv
- bootargs=mem=160M console=ttyAMA0, root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),2688K(kernel),384K(cfg),12M(rootfs)
- bootdelay=
- baudrate=
- ethaddr=:::::
- ipaddr=192.168.1.10
- serverip=192.168.1.2
- netmask=255.255.255.0
- bootfile="uImage"
- bootcmd=sf probe ;sf read 0x80008000 0x100000 0x700000;go 0x80008000
- stdin=serial
- stdout=serial
- stderr=serial
- verify=n
- ver=U-Boot 2010.06 (Oct - ::)
- Environment size: / bytes
和linux也没啥差别
- bootcmd=sf probe 0;sf read 0x80008000 0x100000 0x700000;go 0x80008000
- spi flash 如下
- setenv bootcmd 'sf probe 0;sf read 80008000 0x100000 0x700000;go 80008000'
- saveenv
- 这行是关键行,因为我的sample_venc.bin 烧写在1M的地址~go 80008000这个写死的,因为liteos提供的是.a,所以你没没法修改了....
- 9.保存bootargs 系统就可以起来了.起来log如下.
- System startup
- U-Boot 2010.06 (Oct - ::)
- Check Flash Memory Controller v100 ... Found
- SPI Nor(cs ) ID: 0xc2 0x20 0x18
- Block:64KB Chip:16MB Name:"MX25L128XX"
- SPI Nor total size: 16MB
- MMC:
- EMMC/MMC/SD controller initialization.
- Card did not respond to voltage select!
- No EMMC/MMC/SD device found !
- In: serial
- Out: serial
- Err: serial
- Hit any key to stop autoboot:
- KiB hi_fmc at : is now current device
- ## Starting application at 0x80008000 ...
- ********hello Huawei LiteOS ARM926********
- version : Huawei LiteOS V100R002C00SPC001B011
- open-version : Huawei LiteOS 1.2.
- build data : Feb ::
- **********************************
- osAppInit
- os vfs init ...
- Mount procfs finished.
- uart init ...
- shell init ...
- Huawei LiteOS # spi nor flash init ...
- Spi Nor ID:0xC2 0x20 0x18 0xC2 0x20 0x18 0xC2 0x20
- Spi Nor Flash Info:
- Name:"MX25L128XX" Size:16MB Block:64KB
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- <>Inode # was a directory with children - removing those too...
- spi bus init ...
- i2c bus init ...
- gpio init ...
- dmac init
- random init ...
- net init ...
- Calling lwIPRegSecSspCbk
- enter hisi_eth_init!
- hisi_eth init begin.
- hisi_eth: User did not set phy mode, use default=rmii
- hisi_eth: User did not set phy addr, auto scan...
- Can't find PHY device - id: ffffffff
- cmd_startnetwork : DHCP_BOUND finished
- usb init ...
- ******** usb_init in **********
- usb v2. -- :
- usb ~+ KB
- *** usb init memory error!! ***
- sd/mmc host init ...
- ********mmc host init ! ********
- Now shell working dir is :/
- g_sys_mem_addr_end=0x82000000,
- done init!
- Date:Feb .
- Time:::.
- <>Hisilicon Media Memory Zone Manager
- load sys.ko for Hi3518EV200...OK!
- load tde.ko ...OK!
- load region.ko for Hi3518EV200...OK!
- load vgs.ko for Hi3518EV200...OK!
- load viu.ko for Hi3518EV200...OK!
- Do not support tasklet.
- ISP Mod init!
- load vpss.ko for Hi3518EV200...OK!
- load vou.ko for Hi3518EV200...OK!
- Load hifb.ko OK!
- load rc.ko for Hi3518EV200...OK!
- load venc.ko for Hi3518EV200...OK!
- load chnl.ko for Hi3518EV200...OK!
- load h264e.ko for Hi3518EV200...OK!
- load jpege.ko for Hi3518EV200...OK!
- Load hi_cipher.ko success. mipi_init
- init phy power successful!
- load hi_mipi driver successful!
- acodec [acodec_device_init ,]: misc addr:0x20120000, acodec addr:0x201200c4
- acodec [acodec_device_init ,]: crg addr:0x20030000, acodec crg addr:0x2003008c
- load ive.ko for Hi3518EV200...OK!
- SDK init ok...
- Huawei LiteOS #
系统起来相当快,大概3秒的样子吧。所有的都加载完成了..回车可以输入命令.
支持的命令主要有下面这些.不能tab补全,像我这样拼音不太好的,输一条目录好苦逼.
- Huawei LiteOS # help
- *******************shell commands:*************************
- arp call cat cat_logmpp cd cp cpup dns
- findsym format free help himd himm hwi i2c_read
- i2c_write ifconfig lddrop ldinit ls mclose memcheck mkdir
- mopen mount nand_bad netstat ntpdate partition ping pwd
- readreg reset rm rmdir sample sem ssp_read ssp_write
- statfs swtmr sync systeminfo task telnet tftp touch
- uart_close uart_config uart_read uart_write umount uname writeproc writereg
10.执行sample,直接在shell里面输入sample 会车,就会跑venc这个app了.
因为代码里面sample 注册了一个shell的回调函数.这个地方我也琢磨了下代码,才明白怎么运行sample.大致代码如下
- void app_sample(int argc, char **argv )
- {
- int i = , ret = ;
- int len = ;
- char *pch = NULL;
- TSK_INIT_PARAM_S stappTask;
- if(argc < ) {
- dprintf("illegal parameter!\n");
- }
- if (taskid != -) {
- dprintf("There's a app_main task existed.");
- }
- args_buf_t = zalloc(ARG_BUF_LEN_T);
- memset(&stappTask, , sizeof(TSK_INIT_PARAM_S));
- pch = args_buf_t;
- for(i=; i<ARGS_SIZE_T; i++) {
- ptask_args[i] = NULL;
- }
- argc++;
- ptask_args[] = "app_sample";
- for(i = ; i < argc; i++)
- {
- len = strlen(argv[i-]);
- memcpy(pch , argv[i-], len);
- ptask_args[i] = pch;
- //keep a '\0' at the end of a string.
- pch = pch + len + ;
- if (pch >= args_buf_t +ARG_BUF_LEN_T) {
- dprintf("args out of range!\n");
- break;
- }
- }
- memset(&stappTask, , sizeof(TSK_INIT_PARAM_S));
- stappTask.pfnTaskEntry = (TSK_ENTRY_FUNC)com_app;
- stappTask.uwStackSize = 0x80000;
- stappTask.pcName = "app_sample";
- stappTask.usTaskPrio = ;
- stappTask.uwResved = LOS_TASK_STATUS_DETACHED;
- stappTask.auwArgs[] = argc;
- stappTask.auwArgs[] = (UINT32)ptask_args;
- ret = LOS_TaskCreate((UINT32 *)&taskid, &stappTask);
- dprintf("camera_Task %d,ret is %d\n", taskid,ret);
- //chdir("/sd0");
- chdir("/nfs");
- }
- void sample_command(void)
- {
- osCmdReg(CMD_TYPE_EX, "sample", , (CMD_CBK_FUNC)app_sample);
- }
注意最后一行代码,因为这个玩意没有文件系统的概念..所以venc 里面程序的在根目录下生存.h264文件也没法生成,刚刚开始的时候我改成写入sd卡了.后面在代码里面发现这个,估计这个切换到哪儿,哪儿就是根目录吧...这个是猜的...可能不靠谱...
chdir("/nfs");
11.到这儿...就可以录像拍照了....
总结下:
主要功能都可以去sdk下瞧瞧文档,没怎么开源,不敢轻易上这系统做商业产品.
速度确实快.
从linux版本切换到这儿也很简单,主要就看sdk文档就可以了.
说下功耗吧:
3516cv200 + mn34227 :不跑编码110mA 5V
跑venc,1*1080P H264 + 1*VGA H264. +sd写入:180mA-200mA 5V
这两个是参考值,我这板子可能还有其他外设要点功耗!。
liteos 从入门到放弃的更多相关文章
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- [精品书单] C#/.NET 学习之路——从入门到放弃
C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...
- OpenStack从入门到放弃
OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...
- 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃
一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...
- 《区块链:从入门到放弃》之obc安装步骤
obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...
- win10搭建代理服务器实现绕过校园网的共享限制--从入门到放弃
博主所在学校特别坑爹,校园网被电信一家垄断了,而且最恶心的还是电信要求一条网线只能供一台电脑上网,不许接路由器共享网络= =- (还有电信2M价格是380+每年,20m是500每年,而且网速都很慢= ...
- WPF从入门到放弃系列第二章 XAML
本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃(二)
1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...
随机推荐
- 关于ping地址的几个意义
1.ping 127.0.0.1 判断电脑的tcp/ip协议栈有没有问题 2.ping 本机ip 判断电脑的网卡驱动有没有问题 3.ping 网关 判断数据是否可以到达路由 4.ping www.ba ...
- C# 求俩个正整数的最小公倍数和最大公约数
C# 求俩个正整数的最小公倍数和最大公约数 1.公倍数.最小公倍数 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数 翻开小学5年级下册PPT 1.1 ...
- ssh: connect to host xx.xx.xxx.xxx port 22: Connection refused
执行 ssh root@47.94.142.215 报错 首先要开启ssh 系统偏好设置-共享 选上远程登陆 选上远程管理 检测openssh-server是否安装成功 ,安装成功的如下 ps -e ...
- Excel带条件求和——SUMIF函数
老婆求帮忙,问Excel中怎么跨Sheet带条件求和,就是关于sheet2中筛选出来的数据自动合计在sheet3中 . 比如有个sheet2表中的数据如下: 现在要在sheet3中求合计, 通过分析可 ...
- RabbitMQ之路由键转发消息
RabbitMQ学习 参考:https://www.jianshu.com/p/6b62a0ed2491 消息队列:目前流行的有 Kafka.RabbitMQ.ActiveMQ等 功能:为了解决消息的 ...
- 前端 jquery获取当前页面的URL信息
以前在做网站的时候,经常会遇到当前页的分类高亮显示,以便让用户了解当前处于哪个页面.之前一直是在每个不同页面写方法.工程量大,也不便于修改.一直在想有什么简便的方法实现.后来在网上查到可以用获取当前U ...
- 通过阿里云命令行工具 aliyuncli 购买服务器
开始想通过 aliyuncli 的 golang 源码进行编译安装(注:python 版的 aliyuncli 已不再维护),但没成功,详见 通过 golang 源码编译阿里云命令行工具 aliyun ...
- eclipse与hadoop-eclipse-plugin之间的版本对应关系
eclipse与hadoop-eclipse-plugin之间,版本互相不兼容,或者说,版本要求严格. 把hadoop-eclipse-plugin复制到eclipse的plugins目录下以后,如果 ...
- Gym 101981G - Pyramid - [打表找规律][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem G]
题目链接:http://codeforces.com/gym/101981/attachments The use of the triangle in the New Age practices s ...
- [设计语言][统一建模语言][软件开发方法学][UML] UML
背景介绍 UML是一种统计建模语言. WIKI: https://en.wikipedia.org/wiki/Unified_Modeling_Language UML是OMG (object man ...