|
3、编译uboot和Kernel
1)安装SDK包
拷贝Hi3516C V500R001C02SPC011\01.software\board\Hi3516CV500_SDK_V2.0.1.1.tgz到ubuntu20.04系统中,运行./sdk.unpack(请用 root 或 sudo 权限执行)将会展开 SDK 包打包压缩存放的内容。
解压Hi3516CV500_SDK_V2.0.1.1.tgz
# sudo tar -zxvf Hi3516CV500_SDK_V2.0.1.1.tgz -C ./
进入解压的SDK目录,然后运行./sdk.unpack命令
# sudo ./sdk.unpack
- jingyun@jingyun-Ubuntu:~/dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1$ sudo ./sdk.unpack
- Unpacking SDK
- WARN: Be sure you have installed the cross-compiler. if not, install it first!
- WARN: ALL THE SOUCE FILES WILL BE OVERWRITED, FILES YOU MOTIFIED WILL BE LOST !!!
- SDK_CHIP =hi3516cv500
- unpacking drv
- mkdir: created directory 'drv/'
- run_command_progress_float: 'tar -xvzf package/drv.tgz'
- [100%]##################################################|
- unpacking osal
- mkdir: created directory 'osal/'
- run_command_progress_float: 'tar -xvzf package/osal.tgz'
- [100%]##################################################|
- unpacking osdrv
- mkdir: created directory 'osdrv/'
- run_command_progress_float: 'tar -xvzf package/osdrv.tgz'
- [100%]##################################################|
- mkdir: created directory 'smp'
- mkdir: created directory 'smp/a7_linux/'
- unpacking mpp_smp_linux.tgz
- run_command_progress_float: 'tar -xvzf package/mpp_smp_linux.tgz -C smp/a7_linux'
- [100%]##################################################|
- /home/jingyun/dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1/smp/a7_linux /home/jingyun/dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1
- /home/jingyun/dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1
复制代码
成功执行./sdk.unpack后,会的到一个sdk包:Hi3516CV500_SDK_V2.0.1.1
如果提示source:not found,执行dpkg-reconfigure dash(执行时需要root权限)
#sudo dpkg-reconfigure dash
在出现的界面中选择no,再运行ls -l /bin/sh后显示/bin/sh/->bash
目标是编译sdk包Hi3516CV500_SDK_V2.0.1.1\osdrv根目录
2)将内核的补丁v4.9.37打到linux 的内核kernel上
从linux开源社区下载v4.9.37版本的内核:
(1) 进入网站:http://www.kernel.org
(2)选择HTTP协议资源的https://www.kernel.org/pub/选项,进入子页面
(3)选择linux/菜单项,进入子页面
(4)选择kernel/菜单项,进入子页面
(5)选择v4.x/菜单项,进入子页面
(6)下载linux-4.9.37.tar.gz (或者linux-4.9.37.tar.xz)到osdrv/opensource/kernel目录下
cp linux-4.9.37.tar.gz /home/jingyun/dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1/osdrv/opensource/kernel
(7)在linux服务器中进入 osdrv 的根目录,执行如下命令:
# cd opensource/kernel
# tar -zxf linux-4.9.37.tar.gz
# mv linux-4.9.37 linux-4.9.y
# cd linux-4.9.y
# patch -p1 < ../linux-4.9.37.patch
# cd ../
# tar -czf linux-4.9.y.tgz linux-4.9.y
# cd ../../
完成补丁安装。
3)编译osdrv
注意:由于Makefile中文件系统编译依赖组件较多,不能保证单独编译的文件系统可用,建议采用make all编译。
进入Hi3516CV500_SDK_V2.0.1.1\osdv根目录
(1)清除整个osdrv目录的编译文件:
# make OSDRV_CROSS=arm-himix200-linux clean
(2)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:
# make OSDRV_CROSS=arm-himix200-linux distclean
(3)编译整个osdrv(我自己这样操作报错了 /bin/sh: arm-himix200-linux-gcc:未找到命令 )
解决:终端可以找得到命令 但是Makefile找不到命令/bin/sh: arm-himix200-linux-gcc:未找到命令
分别单独编译即可!看后面的操作!
# sudo make all
fseterr.c: In function 'fseterr':
fseterr.c:78:3: error: #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."
#error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."
^~~~~
make[5]: *** [Makefile:1696: fseterr.o] Error 1
解决:(这样不行的 后面有解决方案!)
sudo apt-get update
sudo apt-get install bison
单独编译kernel(以hi3516dv300举例):
注意:单独编译内核之前请先阅读osdrv/opensource/kernel下的readme_cn.txt说明。
待进入内核源代码目录(dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1/osdrv/opensource/kernel/linux-4.9.y)后,
执行以下操作
cp arch/arm/configs/hi3516dv300_smp_defconfig .config
(emmc启动时执行如下操作:cp arch/arm/configs/hi3516dv300_emmc_smp_defconfig .config)
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig 加载.config配置后退出
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage
Image Name: Linux-4.9.37
Created: Tue Jul 7 14:30:56 2020
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3624762 Bytes = 3539.81 KiB = 3.46 MiB
Load Address: 80008000
Entry Point: 80008000
Kernel: arch/arm/boot/uImage is ready
单独编译uboot(以hi3516dv300举例):
(注意:发布包默认按照DMEB板的配置发布,如果客户单板和DEMB板不一致,需要根据客户自己的单板环境修改uboot表格才能使用,否则可能导致uboot无法启动或者其他问题。)
uboot源代码目录下手动解压(提取到此处) u-boot-2016.11.tgz secureboot_release.tgz
待进入uboot源代码目录(dfy_softwares2/Hi3516CV500_SDK_V2.0.1.1/osdrv/opensource/uboot/u-boot-2016.11)后,
执行以下操作
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- hi3516dv300_defconfig
(emmc启动时执行如下操作:make ARCH=arm CROSS_COMPILE=arm-himix200-linux- hi3516dv300_emmc_defconfig)
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- -j 20
make -C ../../../tools/pc/hi_gzip 执行到这一步报错了 下面的图所示
解决方法:将fseterr.c:78和fseeko.c:110注释起来即可(tools/pc/hi_gzip/gzip-1.8/lib目录下)!
但是再次执行上面的make命令后会重新解压tar -xf gzip-1.8.tgz
所以我的思路是:不改变Makefile文件 将压缩包修改里面的再打包替换即可 tar -cf gzip-1.8.tgz gzip-1.8
我改好的 放附件里了!
再次执行 make -C ../../../tools/pc/hi_gzip 没有报错了!
cp ../../../tools/pc/hi_gzip/bin/gzip arch/arm/cpu/armv7/hi3516dv300/hw_compressed/ -rf
Windowns下进入到osdrv/tools/pc/uboot_tools/目录下打开对应单板的Excel文件(启用宏),在main标签中点击"Generate reg bin file"按钮,生成reg_info.bin即为对应平台的表格文件。
从osdrv/tools/pc/uboot_tools目录拷贝reg_info.bin到uboot源代码目录,重命名为.reg
sudo cp ../../../tools/pc/uboot_tools/reg_info.bin .reg
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- u-boot-z.bin 执行这一步 成功啦 后面有图示!
opensource/uboot/u-boot-2016.11下生成的u-boot-hi3516dv300.bin即为可用的u-boot镜像
|
|