导航:首页 > 源码编译 > 海思的交叉编译

海思的交叉编译

发布时间:2022-12-26 21:55:24

A. 三、内核&文件系统编译

一、编译官方提供的内核源码

1、解压官方提供的内核源码包

2、根据官方提供的配置文件对内核进行配置,方式如下
make  ARCH=arm      xxxxx_defult_config
cp   arch/arm/xxxxx_config    .config

3、打开图形界面对内核进行配置,根据需要增加或者删除模块和其他内容

4、对内核进行编译
make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    uImage  -j6
或者编辑Makefile文件,对其中的ARCH变量和CROSS_COMPILE变量进行修改,然后执行make uImage

5、在编译编译的时候回出现mkimage命令缺失,这个命令是UBootr提供的,在编译的UBoot路径下面找到这个命令,即可直接使用

6、编译的时候各个方面需要一致性,
                1、编译的内核的交叉编译工具链如果支持硬件浮点数运算那么在配置内核的时候也需要添加硬件浮点数的支持
                        Kernel Features --->
                            [*] Use the ARM EABI to compile the kernel
                2、在编译的内核的时候注意保持不要做太多的修改,否则会出问题

7、编译内核模块
    make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    moles  -j6

8、安装内核模块到指定的目录中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build

9、不要采用内核模块安装的命令来安装内核,因为内核不需要安装,在arch/arm/boot/uImage就是所需要的内核文件

二、编译官方提供的busybox来构建根文件系统

1、解压需要编译的busybox源码

2、进入源码中对busybox进行配置,主要是配置交叉编译工具链
Busybox Settings --->Build Options ---> 下面有关于busybox是否配置为采用共享库的模式,还有添加交叉编译工具链的前缀

3、配置需要的文件和命令进行添加或者删除

4、然后执行命令make -jn   && make install

5、创建根文件系统需要的其他的文件和目录,在一个空白的目录中首先拷贝busybox/_install下面的bin、sbin、usr目录到空白目录中,在空白目录中创建其余的所需要的目录文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目录

6、接下来在lib目录中复制内核模块,在编译内核的时候模块安装在了指定的地方,直接拷贝过来就行。

6、创建文件系统所需要的其他文件,配置文件(最简单的办法就是直接复制busybox文件下面的example文件夹里面的东西)
1、/etc/inittab     填写或者    一下是最基本的,还有其他的需要填写
# /etc/inittab
::sysinit:/etc/init.d/rcS                    //指定初始化脚本
::askfirst:-/bin/sh                            //指定第一次输入回车后打开的shell
::ctrlaltdel:/sbin/reboot                //指定这三个按键按下后的反应
::shutdown:/bin/umount -a -r        //指定关机是进行的操作

2、/etc/init.d/rcS                //这个就没有详细额硬性规定了,写入需要初始化的东西即可
#!/bin/sh
mount -a

3、/etc/fstab                        //写入mount -a是要自动挂载的文件系统
# device mount-point type options mp fsck order
proc          /proc        proc  defaults        0    0
tmpfs          /tmp        tmpfs  defaults        0    0

7、拷贝需要用到的库文件,在交叉编译工具链下面存放
arm-linux-xxxxxx-gcc/lib
海思的开发板是在和tahet/lib下面,切记。

B. 海思平台配置toolchain.cmake

交叉编译,在我们的host宿主机器上需要生成target目标机器的程序, 使用CMake的Toolchain管理这里的各种环境变量和配置,就很好.

CMake给交叉编译预留了一个变量-- CMAKE_TOOLCHAIN_FILE , 它定义了一个文件的路径, 这个文件就是 toolchain ,我们可以在里面配置 C_COMPILER , CXX_COMPILER ,如果用Qt的话需要更改 QT_QMAKE_EXECUTABLE 以及如果用 BOOST 的话需要更改的 BOOST_ROOT (具体查看相关 Findxxx.cmake 里面指定的路径), 因此,这个 toolchain 内嵌了一系列需要改变并且需要set的交叉环境的设置.

下面归纳一些比较重要的:

下面是一个常规的配置

这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条 -DCMAKE_TOOLCHAIN_FILE=./cross.toolChain.cmake ,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。

稍微大一点的项目都会用到一些外部依赖库或者tool,CMake提供了 FIND_PROGRAM() , FIND_LIBRARY() , FIND_FILE() , FIND_PATH() and FIND_PACKAGE() 等命令来进行外部依赖的搜索查找。

但是有个问题,假如我们在给一个ARM处理器的移动设备做交叉编译,其中需要寻找 libjpeg.so ,假如 FIND_PACKAGE(JPEG) 返回的是 /usr/lib/libjpeg.so ,那么这就会有问题,因为找到的这个 so 库只是给你的宿主机系统(例如一个x86的Ubuntu主机)服务的,不能用于Arm系统。所以你需要告诉CMake去其它地方去查找,这个时候你就需要配置以下的变量了:

在工程中一般通过如下步骤, 进入工程文件, 创建 arm-himix200-linux.cmake 文件, 内容是:

然后创建build文件夹, 进行编译(注意, 需要指定 CMAKE_MAKE_PROGRAM , 不指定的话好像编译有问题...):

在我的 toolchain 文件中,我指定:

因为我项目中 CMakeLists.txt 中需要查找 OpenSSL 和 curl , 因此会用到CMake自带的 FindOpenSSL.cmake 和 FindCurl.cmake 两个脚本, 他们会用到 Findxxx 命令, 会去我指定的目录去搜索对应的库

https://www.cnblogs.com/rickyk/p/3875334.html
http://www.cmake.org/Wiki/CMake_Cross_Compiling

C. live555移植到hi3516做rtsp服务器

live555库本身实现了做rtsp服务器,客户端可以通过rtsp客户端访问服务器上的文件并播放,支持的文件格式如下:

本次任务实现了把live555移植到嵌入式海思芯片hi3516上做rtsp服务器,除了支持客户端播放服务器上上面格式文件外,另添加了实时播放hi3516摄像头图像与音频的功能。

live555源码目录如下:

四个基本的库分别是:BasicUsageEnvironment, groupsock, liveMedia和UsageEnvironment。
编译后即生成这4个库文件:

这里我只简单说下liveMedia库的功能,其他三个库是live555运行的基础库,太(mei)简(yan)单(jiu),就不说了。

liveMedia库包含了音视频相关的所有功能,包含音视频文件的解析,RTP传输封装等,我们可以看到这个目录下有对h264、AAC等文件解析的支持:

交叉编译过程:略
这里我主要是修改mediaServer文件夹下的示例程序,添加实时预览摄像头图像与mic声音功能。
hi3516芯片,视频编码格式为h264,音频编码格式为AAC。

1.添加音频AAC支持
添加类 ADTSAudioLiveSource ,继承自FramedSource

在该类的doGetNextFrame函数里实现获取hi3516音频数据做为rtsp服务器音频源。
注意点:

1.1 adts默认是带7字节或者9字节的头,传给rtsp的时候是要去掉头的,实际上RTSP通过rtp传输AAC帧的时候是不带adts头的,而是带4个字节的mpeg4-generic头。

1.2 从FramedSource继承而来的变量

每次doGetNextFrame帧时,从FIFO里取一个完整的AAC帧,把帧拷贝到fTo buf里面,然后比较帧大小与fMaxSize来赋值几个关键的变量:

注意,不管帧长是否大于fMaxSize,每次都需要把完整的帧拷贝到fTo指针,live555内部会根据fNumTruncatedBytes等变量自行处理分包。

1.3 doGetNextFrame函数最后不管有没有取到帧,都需要执行FramedSource::afterGetting

1.4 采样率,通道数,configstr等的计算

这几个变量在mediaSubbsession建立RTPsink时要用到,它直接影响了SDP里对于AAC音频描述字段的产生

添加类 ,继承自

createNewStreamSource函数创建上面的ADTSAudioLiveSource做为音频输入源,参数estBitrate为预估的码率,海思AAC编码码率设置为24kbps,所以estBitrate设置为24.
createNewRTPSink有必要继承,因为需要根据音频源的采样率、通道数等创建RTPSink.

2.添加h264支持
添加 H264FramedLiveSource ,继承自FramedSource

unsigned maxFrameSize()函数必须继承,里面设置帧最大可能的大小,我设置为100000,如果不继承就是默认的,会出现画面马赛克
doGetNextFrame函数里面和AAC取帧的处理差不多,我加多了一个步骤,就是第一次取帧的时候会调用接口去产生一个关键帧,并且等待这个关键帧到来才处理,这样连接后出图会比较快。

添加类 ,继承自

这个类就是实现createNewStreamSource时创建H264FramedLiveSource

3.修改DynamicRTSPServer
修改类DynamicRTSPServer,在lookupServerMediaSession函数里动点手脚,默认在这个函数里面会根据文件名去寻找服务器下相应的文件做为直播源,我这里比较如果是我特定的live源名字则直接返回,相应的live源创建rtsp服务器的时候就添加好

4.初始化rtsp server
初始化rtsp服务器,添加一个ServerMediaSession,该mediaSession添加一个和一个,然后把该mediaSession添加给rtsp服务器。

客户端访问 rtsp://x.x.x.x/ch0.live 时就可以看到实时的摄像头图像与声音啦!

D. 面试华为公司自我介绍_应聘华为公司自我介绍怎么说

想到华为公司工作,必须通过 面试 官的考验, 自我介绍 就是第一关。下面我为你带来面试华为公司自我介绍的内容,希望你们喜欢。

面试华为公司自我介绍篇1

good morning !

it is really my honor to have this opportunity for an interview, i hope i can make a good performance today. i'm confident that i can succeed.

now i will introce myself briefly.i am 26 years old,born in shandong province . (general introction)

i was graated from qing university. my major is electronic.and i got my bachelor degree after my graation in the year of 2003. ring university, i spent most of my time on study so that i have passed cet4/6 . and acquired basic knowledge of my major.(ecation background)

in july 2015, i began work for a small private company as a technical support engineer in qing.because i'm capable of more responsibilities, so i decided to change my job. and in august 2004,i left qing to beijing and worked for a foreign enterprise as an automation software test engineer.because i want to change my working environment, i'd like to find a job which is more challenging. moreover motorola is a global company, so i feel i can gain the most from working in this kind of company ennvironment. that is the reason why i come here to compete for this position. (research experience and academic activity)

i think i'm a good team player and i'm a person of great honesty to others. also i am able to work under great pressure.

that’s all. thank you for giving me the chance.

面试华为公司自我介绍篇2

大家好,很高兴见到你们!

我叫##,来自##大学,是即将17年 毕业 的硕士研究生,研究生期间主要做图像处理、机器视觉方面的工作,所以我的求职意向是媒体算法。我的本科也是在##大学理学院读的,专业是信息与计算科学,主要学一些数学和计算机方面的课程,所以我相信自己有比较不错的编程基础。

自己比较喜欢编程,对机器视觉和大数据开发这些这些人工只能领域很感兴趣,所以自己业余时间自学了Linux、shell脚本、python语言,并且研究生期间有一个课题是在ARM平台中做的,所以我对ARM平台的交叉编译也有一定的了解。在学校做的三个项目都是关于目标检测识别的,都是基于C++和计算机视觉库OpenCV做的。所以我相信自己能熟练的运用C++及OpenCV做一些图像处理方面的工作。以上就是我的相关介绍,很荣幸能参加这个面试。谢谢!!!

对华为的了解:

首先众所周知华为是一个大的平台,经营范围很广,并在业内都处于领先的地位,主要经营电信网络设备,已经成为电信设备商的老大。同时华为也有自己的手机品牌和芯片研究。我用的手机就是华为荣耀,感觉相当好用,并且手机用的是华为自己生研究生产的海思芯片,说明华为的技术很牛,是一个优秀的企业。

并且觉我从在华为工作的同学那了解到,华为的氛围相对比较更像大学,非常单纯,同事之间的关系相对比较简单,并且公司有良好的人才培养体系,在里边,新员工可以快速成长,有很多学习和锻炼的机会,有机会接触到业界的核心技术和最前沿的技术理论。总而言之,华为是我向往的公司,希望自己能有机会到里边工作。谢谢!!!

关于面试华为公司自我介绍相关感想

我早在研一的时候就得知华为了。她是中国通信行业的骄傲,她创造了一个奇迹。她有一个完善的培训机制,她给中国培养了大批的IT人才。她是有志青年向往的圣地。每年我们学校都有大批的学生进入华为工作。由于我的期望工作地点是西安,在西安的IT行业中比较好的就数中兴和华为了。中兴和华为都是通讯行业的佼佼者。它们不但在业务上是竞争对手,在人才招聘上也是半斤八两。去年,中兴先于华为校园招聘的。今年的校园招聘启动仪式华为早于中兴,并且华为更新了招聘方式,今年没有笔试环节了直接是技术面试(我应聘的是软件研发岗位)。下面说一说华为招聘过程:

我是10月20号晚上11:00左右接到短信让我第二天9:00到西安宾馆参见技术面试(中兴和华为的通知都是在晚上12:00左右)。我们班有在昨天就接到通知的,我有预感今天晚上就要通知的,所以我在中午就准备好了去华为面试的行装。第二天6:10就起床了,坐上去市里的916班车,大约8:40就到西安宾馆了。到了西安宾馆好多人已经在那里等待了。先是交简历等待,没过长时间就有一个mm点到我的名字,跟着她从一个大厅到了另一个大厅,然后面试官叫我的名字,我跟了进去。面试的地方是在一个大厅里进行的,给我的感觉就像菜市场一样混乱。在厅里临时排了几十张桌子一个挨着一个。面试官还是很礼貌的,先让请坐。然后面试开始。先是一个自我介绍,我在之前已经准备过了,很顺利过去了。然后让我介绍自己做过的项目。我讲了一会。面试官好像听不懂,就问你用了什么算法了吗?我回答我所用的所发。他貌似不知道就说。我们招软件研发是要编程的,我出一个编程题目吧!我说好的。他给我出了一个文件处理的程序,我用半个小时编好了,然后给他讲。将讲完了,然后又给我出。等我出来时我同学说你怎么这么长时间,我看看时间将近2个小时。我同学20分钟就搞定了,他们都是随便问问。估计是因为面试我的比较年轻的缘故吧。就这样顺利通过了技术面。大概没等多长时间就点到我的名字说等下一面。二面就是有名的“群殴”,十二个人分两组。在二面之前,MM问我们有没有认识的(认识的不能一组的),我们都说没有。进入一个会议室,有三个面试官。在U型桌对面坐一排坐6个人。我随意的早了个位坐下。在一张纸上做自己的名片。做好之后。每个人1分钟的自我介绍,要包括自己的优缺点。介绍之后。每两人一份材料,是关于成功的因素。上面罗列了成功的一些因素。首先是自己排序,然后交上去。然后小组讨论。最后每个小组拿出一个方案。在小组讨论中,我发挥的比较好。首先我们做的一个一直说我们要统一。我们找出了一个记录比较快的做记录。大的方向是我提出的。很快我们统一了意见。然后是每个小组选出代表陈述自己小组的决定。面试官指定让我陈述。我站起来,由于有些紧张再加上记录的有些潦草。我没有完全按记录纸上的读,我旁边的一个哥们给我指点,让面试官看见了。我陈述完毕后,面试官问了那个哥们你刚才给~~说什么呢?他说我有些紧张因此没有完全表达出我们组的意见。然后面试官问我:你接受他的意见吗?我说接受。然后面试官说:好的。以后面试官再也没问我问题。在 辩论 环节中,我主动发表了自己的看法。我们小组取得了胜利。然后面试官开始,挑拨对面组的成员,使他们分化相互攻击,叫了几个人说,你们组失败了,我要在你们组淘汰3个人你认为要淘汰谁之类的话。这一轮我们组淘汰了一个人。对面组淘汰了3个。在这一轮中主要考擦团队合作能力、反应能力和抗压能力。第三轮面试是心理测试,只要真实作答一般不会淘汰的。第四关是hr面试,问问你的工作地点,家庭情况。由于我的工作地点要求的比较死。hr让我回去等通知。之后听说在我面试的时候西安的软件研发就没岗位了。等了好几天华为短信说:没有我适合的岗位。

接下来是中兴通讯的笔试,具体时间记得不是很清楚了。首先是笔试,笔试的内容很多有 操作系统 、数据库、SQL语句、数据结构、C/C++语言、JAVA语言、TCP/IP协议、通信知识和单片机等,总之考的很多。笔试还是比较重要的,中兴好像是根据笔试成绩来安排面试顺序的。还好我的笔试成绩还算可以,在笔试后第二天就通知在唐城宾馆参加面试。中兴的面试安排比华为的面试安排的合理,面试官通知我上午10点面试,我提前40分钟到达,到工作人员那里报道后,大约到我和面试官预约时间前5分钟,工作人员就安排我到某某房间面试。到达面试官房间后就开始面试了,面试官一般有两个并且他们每个人有一个手提电脑,简单介绍后,面试官就让我介绍项目,我说了些后,好像他们不太了解也就没问。他们说::”你C++学的不错“。我说:”还可以。“。然后,一个面试官就把 笔记本 上敲进去的程序,让我分析。给出结果。我迅速看了看,是考察类实现的底层东西。还好我看了些。我迅速解决了,然后第二个面试官说:”看你C++学的不错,你看看这个程序有什么问题“。我看了看很简单的东西。顺利答了出来。然后面试官就问你有什么要了解的?我说:”像我非通信专业出身的学生,如果进入你们单位还要学些什么?“。其中一位面试官说:”我们单位很多岗位不一定只需要通信的学生,你的C++不错,学好了就可以了“。然后结束第一次面试。回去等通知。到了晚上12点左右,接到通知,说第二天参加HR面试。第二天参加面试后,想一想当时就是问了些很多网站的面经中都有的问题:你签约了吗?有意向吗?看过面经吗?明年公司派你当面试官,你会怎么选拔人才?等等。然后是 英语口语 测试,很简单。然后是等通知。当天晚上12点左右有个MM通知我第二天去签约。呵呵。就这样签了中兴。

写出来希望可以给想进入中兴华为的朋友有所帮助!

猜你喜欢:

1. 公司求职自我介绍范文

2. 华为实习生面试经验

3. android程序员优秀自我介绍

4. it公司面试自我介绍

5. hr面试自我介绍范文

6. 公司面试自我介绍范文

E. 海思h264解码库可以直接在电脑上面用吗

不行,海思的H264解码库是基于海思芯片,ARM架构的,在电脑上可以交叉编译,但不能直接用。

F. 海思3516DV300搭建交叉编译环境问题记录

刚开始搭建海思交叉编译环境的时候遇到问题:

安装完arm-himix200-linux后,输入arm-himix200-linux -v,会出现如下错误:

xxx@xxx-virtual-machine:~/Downloads/study3516DV300/rp-hi3516dv300-busybox/sample/hifb$ arm-himix200-linux-gcc -v

arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.

错误方法:

export LC_CTYPE=C.UTF-8

这样做的话,arm-himix200-linux-gcc -v会显示成功,但是当去编译sample时候,会出现这个错误

collect2: fatal error: /opt/hisi-linux/x86-arm/arm-himix200-linux/host_bin/../lib/gcc/arm-linux-gnueabi/6.3.0/../../../../arm-linux-gnueabi/bin/nm terminated with signal 6 [Aborted], core mped

解决方案:

vi ~/.bashrc

最后加入这两句,完成后保存

export LC_ALL=C

export PATH="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH"

编辑之后使环境变量生效的命令:source ~/.bashrc

之后编译sample通过,生成sample_hifb文件。

阅读全文

与海思的交叉编译相关的资料

热点内容
怎么区分五代头是不是加密喷头 浏览:238
hunt测试服务器是什么意思 浏览:510
2013程序员考试 浏览:641
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801
win7控制台命令 浏览:567
猫咪成年app怎么升级 浏览:692
360有没有加密软件 浏览:315
清除cisco交换机配置命令 浏览:751
华为删除交换机配置命令 浏览:473
shell打包命令 浏览:827
加密狗插上输不了密码 浏览:187
大学单片机相关科目 浏览:23
自己建了服务器地址 浏览:698
命令按钮的属性设置 浏览:965
证券技术分析pdf 浏览:779
linux命令连接oracle 浏览:202
垫江停车收费桩怎么上App 浏览:135
好兴动app还款怎么登录不上去了 浏览:665