准备:
交叉编译工具:
gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz
交叉编译工具配置文件:
gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
QT5程序交叉编译工具:
fsl-imx-fb-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
U-boot源码:
u-boot-2016.03_svn129_20180307.tar.xz
Linux源码:
linux-4.1.15_svn196_20180124.tar.xz
imx-4.1-krogoth_201712261750.tar.xz
创建工作目录:和官方保持一致可以少改很多东西
源码目录:
$ mkdir ~/my-imx6/02_source –p
工具目录:
$ mkdir ~/my-imx6/03_tools –p
镜像目录:
$mkdir ~/my-imx6/04_image –p
$mkdir ~/my-imx6/04_image/image-linux-4115 –p
应用程序目录:
$ mkdir ~/my-demo
安装linux交叉编译工具链
$ cd ~/my-imx6/03_tools/
把交叉编译工具链和配置文件复制到此目录,并解压交叉编译工具链
$ tar xvf gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz
source配置文件
$source gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
检查环境变量
$ ${CROSS_COMPILE}gcc –v
最后会输出:
gcc version 5.3.1 20160113 (Linaro GCC 5.3-2016.02)
安装QT5交叉编译工具链
拷贝fsl-imx-fb-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh到~/my-imx6/03_tools/目录下,然后执行:
$ sh fsl-imx-fb-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
默认安装路径为/opt/fsl-imx-fb/4.1.15-2.1.0,所以我们一路回车即可输入root权限密码即可。
查看安装是否正确:
$ source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-vfp-neon-poky-linux-gnueabi
$ qmake -v
最后输出:
QMake version 3.0
Using Qt version 5.6.2 in /opt/fsl-imx-fb/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib
编译uboot
在02_source目录下解压uboot源码
$ tar xvf u-boot-2016.03_svn129_20180307.tar.xz
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
$ cd u-boot-2016.03
$ make distclean
myimx6ek140p-6g_defconfig在configs目录下可以找到
$ make myimx6ek140p-6g_defconfig
$ make
编译完成最后一句为:
MKIMAGE u-boot.imx
使用ls命令可以看到在uboot根目录下有一个u-boot.imx文件
把生成的u-boot.imx文件拷贝重命名到~/my-imx6/04_image/image-linux-4115目录下成为我们需要的固件
$ cp u-boot.imx ~//my-imx6/04_image/image-linux-4115/uboot-myimx6ek140p-6g.imx
编译内核
在02_source目录下解压linux源码
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
进入Linux源码目录,执行:
$ make distclean
myimx6a7_defconfig在arch/arm/configs目录下
$ make myimx6a7_defconfig
$ make zImage
编译完成后最后一句输出:
Kernel : arch/arm/boot/ZImage is ready
拷贝重命名zImage到~/my-imx6/04_image/image-linux-4115目录成为我们需要的固件
$cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-4115/zImage-myimx6a7
编译设备树
设备树在arch/arm/boot/dts/myimx6ek140p-6g.dts
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
$ make myimx6ek140p-6g.dtb
在arch/arm/boot/dts/目录下会得到myimx6ek140p-6g.dtb文件
复制myimx6ek140p-6g.dtb到image目录
$ cp arch/arm/boot/dts/myimx6ek140p-6g.dtb ~/my-imx6/04_image/image-linux-4115/
编译模块
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
编译:
$ make modules
安装:
$ make modules_install INSTALL_MOD_PATH=./modules
打包模块文件:
$ cd modules
$ tar cjf ../modules.tar.bz2 *
复制模块包到image目录
$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-4115/kernel-modules-myimx6g.tar.bz2
应用程序编译
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
编写代码
编译
$ ${CROSS_COMPILE}gcc hello.c -o hello.out
$ file hello.out
保存可执行文件到你想要的目录
|