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 ...
随机推荐
- RTX任务管理
默认情况下用户创建的任务栈大小是由参数Task stack size决定的. 如果觉得每个任务都分配同样大小的栈空间不方便的话,可以采用自定义任务栈的方式创建任务.采用自定义方式更灵活 ...
- AS 常用快捷键
上篇中我们讲了Android Studio如何添加插件,这篇我们讲讲AS的快捷键,这里我说明的快捷键都是最最实用的,希望刚刚加入AS的朋友尽快的熟悉一下这几个快捷键,这样可以帮助你提高coding的效 ...
- [git] 能在关键时刻救命的git指令
* 查看所有分支的所有操作记录(关键时刻能救命) git reflog
- 管理菜单 结贴回复 来自 202.112.36.253 的回复: TTL 传输中过期
发表于 2010-08-26 18:29:14 楼主 其实标题是我执行如下命令时的输出:C:\Users\ChenWeiguang>ping 218.198.81.190 正在 Ping 218 ...
- 1.6 flask应用: 代码统计系统
2019-1-6 15:57:18 今天的是做了一个代码统计的demo 使用了数据库的连接池 参考连接 https://www.cnblogs.com/wupeiqi/articles/8184686 ...
- 阿里天池的新任务(简单)(KMP统计子串出现的次数)
阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 输出格式 输出一个整数,为 tt 在 s ...
- jquery验证规则
<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程 ...
- js设计模式(五)---观察者模式
概述: 观察者模式也叫 “ 发布-订阅 " 模式 , 发布者发布信息是不需要考虑订阅者是谁?添加订阅者的时候也不需要通知发布者. 应用: 最经典的就是: DOM事件 开发过程中我们常用自定义 ...
- python学习之旅(十五)
Python基础知识(14):函数(Ⅴ) 一.装饰器 decorator:本质上就是函数,可以增强函数的功能. 定义起来虽然有点复杂,但使用起来非常灵活和方便 1.不修改被装饰函数的源代码 2.不修改 ...
- javascript的数组之from()
Array.from()方法从一个类似数组或可迭代对象中创建一个新的数组实例. const arr = [1, 2, 3]; Array.from(arr); //[1, 2, 3] Array.fr ...