HI3518E新手开发步骤

一、HI3518E新手开发步骤

1、找到SDK。每个平台都有自己的SDK(Software Development Kit),一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立的应用软件时的开发工具的集合。


2、一般会看到3个或以上文件,如海思,hardware、software、reference,硬件部分自己去看,我们看软件部分,进入后,再进入board下,我们会看到我们要的SDK包


3、研究SDK主目录下的脚本文件或readme。进去SDK之后因为系统太庞大,比如海思平台,需要uboot、kernel、交叉编译工具等,很多需要在liunx命令行下执行的操作,如在指定地方解压某个包、mkdir、cp等操作,很繁琐,所以写成脚本文件.sh,通过source一次执行完,通过脚本可以看出到底做了什么工作,再分析。

3.1、脚本文件sdk.unpack主要做了一些解压工作:

        "unpacking osdrv"、"unpacking kernel"、"unpacking drv"


4、通过脚本我们发现重要的东西在osdrv、mpp里面处理。例如海思,解压的osdrv、mpp(Media Process Platform文件,分别进入分析里面的readme或makefile。

4.1、看osdrv下的readme:

        这时我们知道需要编译整个osdrv,去make,但是前提我们需要安装好海思平台下的交叉编译工具链,一般海思SDK里面会提供自己去找。

4.2、安装交叉编译工具链考虑的问题(就是将压缩包解压到指定文件夹,再导出到环境变量即可):

        4.2.1、问题:我的Ubuntu是64位,你的平台提供的工具链是多少位,使用file + name查看你的工具链信息?

                    (1)方法1:换32位Ubuntu

                    (2)方法2:装32位兼容包

        4.2.2、我们使用方法2:

                    (1)百度搜索方法,一般就是要安装lib32zl,用aptitude方法安装,因为使用sudo apt-get发现安装不了。

                    (2)测试执行arm-xxx -gcc  -v 看是否安装成功。提示找不到stdc++错误

                    (3)百度搜索需要安装lib32stdc++6-4.8-dbg,sudo aptitude 安装

                    (4)再次测试可以运行了

4.3、分析osdrv下的主makefile:

        按照readme提供的方法去make + 传参。这是会执行makefile,中途会出现很多问题,你要自己通过打印信息,与makefile对照,看问题出在那里,手动处理一些问题。一次能通过当然最好。

        (1)make时,发现找不到arm-hisiv300-linux-gcc

        (2)修改makefile中OSDRV_CROSS的路径,结果不行,原因是:make +传参中覆盖了变量的路径

        (3)因为没有导出到环境变量?在ubuntu执行export PATH=/xxx/xxx/arm-hisiv300-linux/bin:$PATH

        (4)然后echo $PATH看是否导出了,执行arm-hisiv300-linux-uclibcgnueabi-gcc -v,测试可以

        (5)为了每次打开终端都能导出到环境变量,我们在当前用户的~/.bashrc脚本里面添加上面的导出命令      

        (6)还是不行,后面发现是makefile里面使用的make+传参是arm-hisiv300-linux,我们的安装的是arm-hisiv300-linux-uclibcgnueabi,所以我们要给安装好的交叉编译工具链建立符号链接,不能更改传参,因为makefile里面都是用arm-hisiv300-linux,你需要改太多了,不仅仅是改传参。

        (7)创建符号链接,后面发现,在海思提供的工具链里面有一个脚本,来帮助我们在指定的地方创建了。我们只要执行就好。./cross.install.v300最好按照别人的玩,我们自己创建的链接放的位置,SDK平台没考虑,可能在执行一些其他脚本时,我们的符号链接会被删除。

        (8)然后打开用户目录下的bashrc。vi ~/ .bashrc 导出符号链接安装的路径即可。


5、通过make后,uboot、kernel、rootfs等被一次性编译成了镜像看主makefile我们得知uboot、kernel被编译后的镜像放在哪里    如:/opensource/uboot/u-boot-2010.06/u-boot.bin

5.1、编译osdrv

        (1)查看打印信息,制作uImage时,mkimage没有找到。进入  /opensource/uboot/u-boot-2010.06/tools 将mkimage cp 到/usr/local/bin下面,因为这是默认导出到环境变量的目录,这样mkimage就能被找到执行了,不然只有在文件所在目录下才能执行

           (2)再次make ,到目前uboot、kernel已经完成编译,但是还是有错,到了rootfs部分了。

5.2、编译osdrv过程中(rootfs部分出现问题)

           (1)错误:在编译jffs2_tool时出错,提示没有安装zlib库

                    解决办法:百度,叫你下载,并安装,但是我们的SDK已经提供了,makefile里面也解压,编译过了,生成了lib库(动、静态库)只是makefile并没有去部署它,只是他们没有注意,不成熟。所以我们自己去部署,将库部署到与jffs2下面的include去包含即可

                     错误分析:出了错就看打印信息,最终追溯到makefile,看执行到具体哪一步出现了错,方法就是看makefine执行的命令,与实际目录下生成对应文件,到了具体哪一步,再根据我们的需要,删减makefile,最后发现是

            (2)错误:编译rootfs时提示“hints”没有找到

                        错误原因:因为Ubuntu版本太高,而SDK使用的mtd-utils-1.5.0版本太低,16.04支持更高版本的如果需要将jffs2移植到arm开发板上,那么就需要下载源码进行交叉编译了,这就需要下载工具软件源码包mtd-utils了。编译实在tmp里面进行的,最后生成的镜像在tmp/mtd-utils-1.5.0/,这个文件里面有很多种文件系统格式,就有我们要的mkfs.jffs2格式。                                                                                                                   

                        解决方案:修改操作系统头文件 vi /usr/include/netdb.h 将__USE_XOPEN2K注释,注意#ifdef与#endif是一一对应的。

            (3)再去make,还是会有错,但是,到目前,从对于生成的文件来看,已近得到了mkfs.jffs2,只是因为makefile在编译rootfs时,会把它编译成好几种文件格式,编译成其他格式时,出了错,导致,makefile接下来的命令没有被执行,所以我们要手动执行makefile下面的操作,使我们需要的命令被执行,然后生成需要的镜像,之后将makefile中准备生成其它格式的rootfs命令删除,不然还是会有错。

                    细节:要想做到这一步需要对roofs制作过程,格式等比较了解才知道,自己得到了需要的,才能正确的更改makefile


6、


  

        


猜你喜欢

转载自blog.csdn.net/qq_40334837/article/details/79746758