Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
编译
内核可以从以下链接得到:
首先用git clone将代码下载到本地(以下以i.MX6为例):
git clone git://git.phytec.de/linux-mainline
然后根据下面的表:
checkout到对应的版本(Tag)上:
cd linux-mainline git checkout v4.1.46-phy4
接下来就可以编译,在编译前,需要
- 编译SDK(也可以下载,在我们下载服务器的BSP文件夹中的SDK文件夹中)
- 安装SDK
以上两个都可以在:怎样用yocto生成SDK,以及SDK使用方法 中找到。
接下来source SDK的环境:
. (path to sdk)/environment-setup-cortexa9hf-neon-phytec-linux-gnueabi
此时需要export一个变量,这样告诉后边各种操作是针对arm平台的。
arm | arm64 |
---|---|
export ARCH=arm | export ARCH=arm64 |
然后准备.config文件,config文件位于内核代码的 arch/arm/configs/
你可以在yocto目录的 sources/meta-phytec/conf/machine/include 中查找 imx_v6_v7_defconfig imx6_phytec_distro.config(PD20+) + imx6_phytec_machine.config(PD20+) + imx6_phytec_platform.config(PD20+) imx_v6_v7_defconfig arch/arm/configs/imx_v6_v7_defconfig(PD21+) + arch/arm/configs/imx6_phytec_*(PD21+) arch/arm64/configs/defconfig defconfig imx8_phytec_distro.config imx8_phytec_platform.config defconfig imx8_phytec_distro.config imx8_phytec_platform.configKernel config phyCORE i.MX6 linux-mainline phyCORE i.MX6ul linux-mainline phyCORE i.MX6ul linux-imx imx_v7_defconfig phyCORE AM335x linux-ti am335x_phytec_defconfig phyCORE AM335x linux-mainline am335x_phytec_defconfig phyCORE i.MX6 Android linux-imx android_miraq_defconfig phyCORE RK3288 linux-mainline rk3288_phytec_defconfig phyCORE AM572x linux-phytec-ti am572x_phycore_rdk_defconfig or am57xx_phycore_kit_defconfig phyCORE i.MX7 linux-phytec-fsl imx7_phyboard_zeta_defconfig phyCORE i.MX8M linux-imx phyCORE i.MX8MM linux-imx phyCORE i.MX8MP linux-imx phyCORE AM65xx linux-phytec-ti am65xx_phycore_kit_defconfig
然后
单defconfig的平台 | config+conf的平台 |
---|---|
make imx_v6_v7_defconfig | ./scripts/kconfig/merge_config.sh -m arch/arm64/configs/defconfig arch/arm64/configs/imx8_phytec_platform.config arch/arm64/configs/imx8_phytec_distro.config |
或者从yocto的deploy中复制zImage.config到源码覆盖.config来使用(不推荐)。
如果需要配置内核的menuconfig,需要注意的是,这个不能在有sdk环境的shell中执行,否则会报ncurses lib的错误。下面这个指令执行前需要export ARCH=arm。
make menuconfig
然后编译内核:
arm | arm64 |
---|---|
make zImage -j? | make Image -j? |
j后面的参数是编译使用的线程数,一般为PC的CPU最大线程数。
编译设备树:
dts位于arch/arm(64)/boot/dts/ | dts位于arch/arm(64)/boot/dts/freescale |
---|---|
make xxxx.dtb | make freescale/xxxx.dtb 然后 make menuconfig |
- 内核的make命令帮助 https://www.kernel.org/doc/makehelp.txt
设备树的名称:
你可以在yocto目录的 sources/meta-phytec/conf/machine 中查找对应的machine名称来查找。 imx6q-phytec-mira-ff-rdk-nand.dtb(PD18+) imx6q-phytec-mira-rdk-nand.dtb(PD16) imx6dl-phytec-mira-rdk-nand.dtb(PD16) imx6ul-phytec-phyboard-segin-ff-rdk.dtb(PD17) imx6ul-phytec-segin-ff-rdk-nand.dtb(PD19+) freescale/phytec-imx8mq-phyboard-polaris-rdk-emmc.dtb freescale/phytec-imx8mq-phyboard-polaris-rdk-emmc-sterling.dtb (设备树目录:arch/arm64/boot/dts/) A7:phycore-stm32mp1-3-a7-examples.dtb M4:phycore-stm32mp1-3-m4-examples.dtb k3-am65xx-phycore-kit.dtb k3-am65xx-phytec-lcd-018.dtso imx8mp-phyboard-pollux-rdk.dtbmachine dts phycore-am335x-1 am335x-phycore-rdk.dtb phycore-r2-am335x-1 am335x-phycore-nand-eeprom-rtc-spi-tmp.dtb phyboard-wega-am335x-1 am335x-wega-rdk.dtb phyflex-imx6-1/2 imx6q-phytec-pbab01.dtb phyflex-imx6-6 imx6dl-phytec-pbab01.dtb phyboard-mira-imx6-3 phyboard-mira-imx6-4/6 phyboard-mira-imx6-5/7 imx6q-phytec-mira-rdk-emmc.dtb(PD16) phyboard-mira-imx6-15 imx6dl-phytec-mira-ff-rdk-nand.dtb(PD18+) phycore android imx6q-phytec-mira-rdk-nand.dtb phyCORE RK3288 linux rk3288-phycore-rdk.dtb phyboard-segin-imx6ul-2 phyboard-mira-imx6-13 imx6q-phytec-mira-rdk-nand.dtb phyboard-segin-imx6ul-7 imx6ull-phytec-segin-ff-rdk-emmc.dtb imx7d-phyboard-zeta-001 imx7d-phyboard-zeta-001.dtb phyboard-polaris-imx8m-3 phyboard-polis-imx8mm-3 freescale/imx8mm-phyboard-polis-rdk.dtb phycore-stm32mp1-3 am65x phyboard-pollux-imx8mp-3
defconfig的操作方法
当.config文件有修改后
make savedefconfig
保存当前config为defconfig,然后复制该文件覆盖原文件,如在imx6下
cp defconfig arch/arm/configs/imx_v6_v7_defconfig
此时就可以用git diff看到和之前所做的更改。
编译错误时的解决
问题 | 解决 |
---|---|
一般问题 | make mrproper 然后再重新编译。 另外用git status检查文件是否有修改。 |
在编译设备树时,头文件找不到。 fatal error: dt-bindings/gpio/gpio.h: No such file or directory #include <dt-bindings/gpio/gpio.h> ^~~~~~~~~~~~~~~~~~~~~~~~~ | 新版本内核,检查下面目录中的链接文件是否正常,不正常删掉后git reset --hard % ls -alh scripts/dtc/include-prefixes total 8.0K drwxrwxr-x 2 bob bob 4.0K 9月 24 18:53 . drwxrwxr-x 4 bob bob 4.0K 9月 24 18:47 .. lrwxrwxrwx 1 bob bob 26 9月 24 18:53 arc -> ../../../arch/arc/boot/dts lrwxrwxrwx 1 bob bob 26 9月 24 18:53 arm -> ../../../arch/arm/boot/dts lrwxrwxrwx 1 bob bob 28 9月 24 18:53 arm64 -> ../../../arch/arm64/boot/dts lrwxrwxrwx 1 bob bob 26 9月 24 18:53 c6x -> ../../../arch/c6x/boot/dts lrwxrwxrwx 1 bob bob 27 9月 24 18:53 cris -> ../../../arch/cris/boot/dts lrwxrwxrwx 1 bob bob 28 9月 24 18:53 dt-bindings -> ../../../include/dt-bindings lrwxrwxrwx 1 bob bob 28 9月 24 18:53 h8300 -> ../../../arch/h8300/boot/dts lrwxrwxrwx 1 bob bob 28 9月 24 18:53 metag -> ../../../arch/metag/boot/dts lrwxrwxrwx 1 bob bob 33 9月 24 18:53 microblaze -> ../../../arch/microblaze/boot/dts lrwxrwxrwx 1 bob bob 27 9月 24 18:53 mips -> ../../../arch/mips/boot/dts lrwxrwxrwx 1 bob bob 28 9月 24 18:53 nios2 -> ../../../arch/nios2/boot/dts lrwxrwxrwx 1 bob bob 31 9月 24 18:53 openrisc -> ../../../arch/openrisc/boot/dts lrwxrwxrwx 1 bob bob 30 9月 24 18:53 powerpc -> ../../../arch/powerpc/boot/dts lrwxrwxrwx 1 bob bob 25 9月 24 18:53 sh -> ../../../arch/sh/boot/dts lrwxrwxrwx 1 bob bob 29 9月 24 18:53 xtensa -> ../../../arch/xtensa/boot/dts 旧版本内核,同上,只是文件位置不同。 % ls ~/kernel/linux-mainline/arch/arm/boot/dts/include/ -l total 0 lrwxrwxrwx 1 nzhang nzhang 34 10月 19 2018 dt-bindings -> ../../../../../include/dt-bindings |