Difference between revisions of "Building U-boot and Linux for H5/H3/H2+/zh"
(→Mainline Linux开发进展) |
|||
Line 23: | Line 23: | ||
|- | |- | ||
|NanoPi NEO2||[https://pan.baidu.com/s/1eRDbeG6 下载] || official-ROMs/nanopi-neo2_ubuntu-core-xenial_4.11.0.img.zip | |NanoPi NEO2||[https://pan.baidu.com/s/1eRDbeG6 下载] || official-ROMs/nanopi-neo2_ubuntu-core-xenial_4.11.0.img.zip | ||
− | |||
− | |||
|- | |- | ||
|} | |} | ||
Line 40: | Line 38: | ||
首先下载并解压编译器: | 首先下载并解压编译器: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | git clone https://github.com/friendlyarm/prebuilts.git | + | $ git clone https://github.com/friendlyarm/prebuilts.git |
− | + | $ mkdir -p /opt/FriendlyARM/toolchain | |
− | + | $ tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/ | |
</syntaxhighlight> | </syntaxhighlight> | ||
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容: | 然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH | + | $ export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH |
− | export GCC_COLORS=auto | + | $ export GCC_COLORS=auto |
</syntaxhighlight> | </syntaxhighlight> | ||
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格: | 执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | . ~/.bashrc | + | $ . ~/.bashrc |
</syntaxhighlight> | </syntaxhighlight> | ||
这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功: | 这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | arm-linux-gcc -v | + | $ arm-linux-gcc -v |
Using built-in specs. | Using built-in specs. | ||
COLLECT_GCC=arm-linux-gcc | COLLECT_GCC=arm-linux-gcc | ||
Line 73: | Line 71: | ||
====编译U-boot==== | ====编译U-boot==== | ||
− | 下载U- | + | 下载U-boot源码,并切换分支: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | git clone https://github.com/friendlyarm/uboot.git | + | $ git clone https://github.com/friendlyarm/uboot.git |
− | cd u-boot | + | $ cd u-boot |
− | git checkout sunxi-v2017.03 | + | $ git checkout sunxi-v2017.03 |
</syntaxhighlight> | </syntaxhighlight> | ||
编译U-boot: | 编译U-boot: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | make nanopi_neo_defconfig ARCH=arm CROSS_COMPILE=arm-linux- | + | $ make nanopi_neo_defconfig ARCH=arm CROSS_COMPILE=arm-linux- |
− | make ARCH=arm CROSS_COMPILE=arm-linux- | + | $ make ARCH=arm CROSS_COMPILE=arm-linux- |
</syntaxhighlight> | </syntaxhighlight> | ||
更新SD上的U-boot: | 更新SD上的U-boot: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8 | + | $ dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8 |
</syntaxhighlight> | </syntaxhighlight> | ||
/dev/sdx请替换为实际的TF卡设备文件名。 | /dev/sdx请替换为实际的TF卡设备文件名。 | ||
====编译Linux内核==== | ====编译Linux内核==== | ||
− | + | 下载Linux内核源码,并切换分支: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | git clone https://github.com/friendlyarm/linux.git | + | $ git clone https://github.com/friendlyarm/linux.git |
− | cd linux | + | $ cd linux |
− | git checkout sunxi-4.11.y | + | $ git checkout sunxi-4.11.y |
</syntaxhighlight> | </syntaxhighlight> | ||
编译Linux内核: | 编译Linux内核: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | touch .scmversion | + | $ touch .scmversion |
− | make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux- | + | $ make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux- |
− | make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux- | + | $ make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux- |
</syntaxhighlight> | </syntaxhighlight> | ||
编译完成后会在arch/arm/boot/目录下生成zImage,并且在arch/arm/boot/dts/目录下生成dtb文件。 | 编译完成后会在arch/arm/boot/目录下生成zImage,并且在arch/arm/boot/dts/目录下生成dtb文件。 | ||
Line 110: | Line 108: | ||
假设SD卡的boot分区挂载在/media/SD/boot/,更新SD卡上的zImage和dtb文件: | 假设SD卡的boot分区挂载在/media/SD/boot/,更新SD卡上的zImage和dtb文件: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | cp arch/arm/boot/zImage /media/SD/boot/ | + | $ cp arch/arm/boot/zImage /media/SD/boot/ |
− | cp arch/arm/boot/dts/sun8i-h3-nanopi*.dtb /media/SD/boot/ | + | $ cp arch/arm/boot/dts/sun8i-h3-nanopi*.dtb /media/SD/boot/ |
</syntaxhighlight> | </syntaxhighlight> | ||
===如何为H5编译mainline BSP=== | ===如何为H5编译mainline BSP=== | ||
====安装交叉编译器==== | ====安装交叉编译器==== | ||
+ | 首先下载并解压编译器: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ mkdir -p /opt/FriendlyARM/toolchain | ||
+ | $ tar xf gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz -C /opt/FriendlyARM/toolchain/ | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ export PATH=/opt/FriendlyARM/toolchain/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin:$PATH | ||
+ | $ export GCC_COLORS=auto | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ . ~/.bashrc | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 安装完成后,你可以快速的验证是否安装成功: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ aarch64-linux-gnu-gcc -v | ||
+ | gcc version 6.3.1 20170109 (Linaro GCC 6.3-2017.02) | ||
+ | </syntaxhighlight> | ||
+ | |||
====编译U-boot==== | ====编译U-boot==== | ||
+ | 下载U-boot源码,并切换分支: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ git clone https://github.com/friendlyarm/uboot.git | ||
+ | $ cd u-boot | ||
+ | $ git checkout sunxi-v2017.03 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 编译U-boot: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ make nanopi_neo2_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- | ||
+ | $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 更新SD上的U-boot: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ dd if=spl/sunxi-spl.bin of=/dev/sdX bs=1024 seek=8 | ||
+ | $ dd if=u-boot.itb of=/dev/sdg bs=1024 seek=40 | ||
+ | </syntaxhighlight> | ||
+ | /dev/sdx请替换为实际的TF卡设备文件名。 | ||
+ | |||
====编译Linux内核==== | ====编译Linux内核==== | ||
+ | 下载Linux内核源码,并切换分支: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone https://github.com/friendlyarm/linux.git | ||
+ | $ cd linux | ||
+ | $ git checkout sunxi-4.11.y | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 编译Linux内核: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ touch .scmversion | ||
+ | $ make sunxi_arm64_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- | ||
+ | $ make Image dtbs ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- | ||
+ | </syntaxhighlight> | ||
+ | 编译完成后会在arch/arm64/boot/目录下生成Image,并且在arch/arm64/boot/dts/allwinner/目录下生成dtb文件。 | ||
+ | |||
+ | 假设SD卡的boot分区挂载在/media/SD/boot/,更新SD卡上的Image和dtb文件: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cp arch/arm64/boot/Image /media/SD/boot/ | ||
+ | cp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb /media/SD/boot/ | ||
+ | </syntaxhighlight> |
Revision as of 07:30, 28 April 2017
Contents
1 Mainline 简介
Mainline即主线的意思,Linux内核的开发分为linus维护的主线、其他开发分支以及各种稳定版本。开发分支最终都会统一提交到linus维护的主线中。 最新版本的U-boot和主线Linux内核已经支持了全志的H3/H5 CPU,我们在最新版本的的U-boot和主线Linux内核的基础上进行了定制开发,使其能支持上NanoPi H3/H5系列的开发板。
2 制作一张带运行系统的SD卡
2.1 下载系统固件
板子名称 固件下载地址 固件名称 NanoPi NEO 下载 official-ROMs/nanopi-neo_ubuntu-core-xenial_4.11.0.img.zip NanoPi NEO Air 下载 official-ROMs/nanopi-neo-air_ubuntu-core-xenial_4.11.0.img.zip NanoPi M1 下载 official-ROMs/nanopi-m1_ubuntu-core-xenial_4.11.0.img.zip NanoPi M1 Plus 下载 official-ROMs/nanopi-m1-plus_ubuntu-core-xenial_4.11.0.img.zip NanoPi NEO2 下载 official-ROMs/nanopi-neo2_ubuntu-core-xenial_4.11.0.img.zip
2.2 制作Ubuntu-Core with Qt-Embedded系统TF卡
将固件和烧写工具 win32diskimager.rar 分别解压,在 Windows 下插入TF卡(限4G及以上的卡),以管理员身份运行 win32diskimager 工具,
在 win32diskimager 工具的界面上,选择你的SD卡盘符,选择系统固件,点击 Write 按钮烧写即可。烧写完成后,将制作好SD卡插入 NanoPi H3/H5 开发板,使用USB供电(5V/2A),看到板上的蓝色LED闪烁,这说明系统已经开始启动了。
3 Mainline Linux开发进展
4 如何编译mainline BSP
4.1 如何为H3编译mainline BSP
4.1.1 安装交叉编译器
首先下载并解压编译器:
$ git clone https://github.com/friendlyarm/prebuilts.git $ mkdir -p /opt/FriendlyARM/toolchain $ tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
$ export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH $ export GCC_COLORS=auto
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
$ . ~/.bashrc
这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:
$ arm-linux-gcc -v Using built-in specs. COLLECT_GCC=arm-linux-gcc COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/4.9.3/libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper Target: arm-cortexa9-linux-gnueabihf Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard ... Thread model: posix gcc version 4.9.3 (ctng-1.21.0-229g-FA)
4.1.2 编译U-boot
下载U-boot源码,并切换分支:
$ git clone https://github.com/friendlyarm/uboot.git $ cd u-boot $ git checkout sunxi-v2017.03
编译U-boot:
$ make nanopi_neo_defconfig ARCH=arm CROSS_COMPILE=arm-linux- $ make ARCH=arm CROSS_COMPILE=arm-linux-
更新SD上的U-boot:
$ dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
/dev/sdx请替换为实际的TF卡设备文件名。
4.1.3 编译Linux内核
下载Linux内核源码,并切换分支:
$ git clone https://github.com/friendlyarm/linux.git $ cd linux $ git checkout sunxi-4.11.y
编译Linux内核:
$ touch .scmversion $ make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux- $ make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-
编译完成后会在arch/arm/boot/目录下生成zImage,并且在arch/arm/boot/dts/目录下生成dtb文件。
假设SD卡的boot分区挂载在/media/SD/boot/,更新SD卡上的zImage和dtb文件:
$ cp arch/arm/boot/zImage /media/SD/boot/ $ cp arch/arm/boot/dts/sun8i-h3-nanopi*.dtb /media/SD/boot/
4.2 如何为H5编译mainline BSP
4.2.1 安装交叉编译器
首先下载并解压编译器:
$ mkdir -p /opt/FriendlyARM/toolchain $ tar xf gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz -C /opt/FriendlyARM/toolchain/
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
$ export PATH=/opt/FriendlyARM/toolchain/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin:$PATH $ export GCC_COLORS=auto
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
$ . ~/.bashrc
安装完成后,你可以快速的验证是否安装成功:
$ aarch64-linux-gnu-gcc -v gcc version 6.3.1 20170109 (Linaro GCC 6.3-2017.02)
4.2.2 编译U-boot
下载U-boot源码,并切换分支:
$ git clone https://github.com/friendlyarm/uboot.git $ cd u-boot $ git checkout sunxi-v2017.03
编译U-boot:
$ make nanopi_neo2_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
更新SD上的U-boot:
$ dd if=spl/sunxi-spl.bin of=/dev/sdX bs=1024 seek=8 $ dd if=u-boot.itb of=/dev/sdg bs=1024 seek=40
/dev/sdx请替换为实际的TF卡设备文件名。
4.2.3 编译Linux内核
下载Linux内核源码,并切换分支:
git clone https://github.com/friendlyarm/linux.git $ cd linux $ git checkout sunxi-4.11.y
编译Linux内核:
$ touch .scmversion $ make sunxi_arm64_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- $ make Image dtbs ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
编译完成后会在arch/arm64/boot/目录下生成Image,并且在arch/arm64/boot/dts/allwinner/目录下生成dtb文件。
假设SD卡的boot分区挂载在/media/SD/boot/,更新SD卡上的Image和dtb文件:
cp arch/arm64/boot/Image /media/SD/boot/ cp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb /media/SD/boot/