一.搭建环境
1.配置GCC环境变量 多阅读几遍"AnyCloud37D PDK用户开发手册_V1.0.4"。将编译工具链(anyak37d_gcc)配置好。
2.测试环境变量是否配置好,在/home/(你的用户名)/workspace/下面 arm-anyka 然后补全,如果能补全说明环境变量配置好,否则再检查上一步
二.板级配置(这一步一般不需要操作,前期给你配置好了)
根据不同的IC规格开放不同的宏(/uboot/include/configs/ak_board.h)
a.选择DDR2容量
64MB #define CONFIG_DRAM_64M
128MB #define CONFIG_DRAM_128M
b.选择FLASH类型
NOR Flash :默认启动方式,不需要宏定义
NAND Flash: #define CONFIG_SPINAND_FLASH
#define CONFIG_SPL_BOOT
c.选择屏幕
选择MIPI 删除RGB的宏定义或者 #define CONFIG_MIPI_CORE_BOARD
选择RGB #define CONFIG_RGB_CORE_BOARD
d.编译全功能u-boot或者快速启动u-boot spl镜像
默认编译全功能u-boot镜像(u-boot.bin)
编译快速启动spl-u-boot :#define CONFIG_SPL_BOOT
三.编译
说明:因为sdk有提供一键编译,但是建议不要用,每一步自己都手动编译,这样做的目的是加深对linux系统的了解。
linux系统一般分为四部分:u-boot(启动引导)+kernel(系统框架+内核驱动)+rootfs(文件系统)+APP(你的执行程序)
1.编译u-boot
进入uboot文件下
第一步:建立编译文件夹: mkdir ../ubd
第二部:写入配置文件:make O=../udb xxx_defconf(O代表输出路径 "xxx_defconf"代表的是你这个工程的配置文件,每个项目因为有些细小的差异(比如触摸驱动),所以配置文件不大相同)
第三步:生成执行文件:make O=../udb all 编译顺利的话,将在ubd目录下生成u_boot.bin文件,这个就是u-boot镜像文件,将这个复制到烧录文件夹下面
2.编译kernel
步骤与u-boot类似,区别在于内核不止生成内核镜像(uImage)文件,还需要生成设备树文件(xxx.dtb),这个文件功能是配置不同的功能模块所需的信息,比如屏幕驱动所需要的PIN,使能哪些串口,I2C等,dtb文件由dts文件生成,具体配置看(ernel\arch\arm\boot\dts)路径下
进入kernel文件夹下,
第一步:mkdir ../bd
第二部:make O=../bd xxx_deconf
第三步:make O=../bd uImage dtbs modules -j4 (uImage表示编译生成uImage镜像文件,dtbs表示生成所有的dtb文件,modules表示生成所有的ko文件,这个是在xxx_deconf文件里面配置的)
第三步顺利的编译后将在,..\bd\arch\arm\boot路径下生成uImage文件,在..\bd\arch\arm\boot\dts\下面生成所有的dtb文件。将所需要的dtb和uImage文件复制到烧录工具文件下面。
3.制作rootfs
如果需要配置,比如需要copy一些库文件,开机执行的脚本等,可以预先在执行脚本中添加,都是标准的脚本语句。然后执行./make_image.sh,将在rootfs文件下面生成三个非常重要的文件
第一个:root.sqsh4,这个就是根文件系统。(dev etc lib mnt proc sbin sys tmp usr var)这个是在boxbusy中生成的,一般不会再去修改
第二个:usr.sqsh4,这个就是挂在/usr目录下面的文件。里面主要是四个大类:bin(linux下常用的可执行文件) lib(所需要的动态库(.so)) modules(所需要的驱动ko文件 ) sbin(一些执行脚本)。当然这个分区是可以添加其他文件,但是
这是个只读分区。
第三个: usr.jffs2,这个是挂在/etc/config文件下的。这个分区没什么特别,但是这个是可读写分区,一般我们将自己的app放在这个分区下面,因为可读写,所以可以很简单升级我们的app文件。
四.烧录
这个看操作说明,值得注意的是如果分区不够,需要修改分区大小。到时候熟练使用后再议
五.运行APP
在开机执行的脚本中加入运行你的app文件,一般我们都是放在/usr/sbin/main.sh文件最下面执行。