Ubuntu12.04下搭建
提前准备好如下工具和文件:
工具 | 描述 | 使用方法 |
---|---|---|
device-tree-compiler | 设备树编译器(32bit) | sudo apt-get install device-tree-compiler |
mkfs_2tools.tgz | 2个打包工具,mkimage、make_ext4fs | 下载 安装 |
itop4412_kernel_4_14_2_bsp-20190225.tar.gz | 设备树源码包,在4412设备树相关视频下找到。 | |
gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz | gcc交叉编译工具,包含在上面设备树源码包压缩文件中。 | 安装方法见下面 |
操作方法如下:
-
确保mkimage工具存在 安装mkimage
-
安装装设备树编译器:
1
sudo apt-get install device-tree-compiler
-
解压源码包:
1
tar -vxf itop4412_kernel_4_14_2_bsp-20190225.tar.gz
-
进入源码包解压后的目录,移动gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz文件
1
mv gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz /usr/local/arm/
-
进入
/usr/local/arm/
目录,对交叉gcc编译器进行解压1
tar -vxf gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz
-
添加环境变量并更新
vim ~/.bashrc
中添加当前用户环境变量,然后source ~/.bashrc
更新:1
export PATH=$PATH:/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin
或者更改全局环境变量
vim /etc/profile
,然后source /etc/profile
更新; -
进入源码包解压后的目录,修改编译器
修改uboot源码包中编译器:
vim u-boot-2017.11/u-boot-2017.11/Makefile
修改kernel源码包中编译器:
vim linux-4.14.2_iTop-4412_scp/Makefile
均修改编译器配置如下:
1
CROSS_COMPILE := arm-fsl-linux-gnueabi-
-
上述完成后,执行源码包目录中编译全部的脚本
1
./build_all.sh
没报错就成功了。
脚本内容:
build_all.sh
是uboot、kernel和设备树一起编译的脚本;
u-boot-2017.11/u-boot/build.sh
是单独编译uboot的脚本;
linux-4.14.2_iTop-4412_scp/build_kernel.sh
是单独编译内核的脚本;其中编译配置是其下的linux-4.14.2_iTop-4412_scp/arch/arm/configs/iTop-4412_scp_defconfig
文件,脚本执行中该文件会覆盖.config
文件。
镜像生成地址:
uboot镜像:u-boot-2017.11/u-boot/u-boot-iTOP-4412.bin
内核镜像:linux-4.14.2_iTop-4412_scp/arch/arm/boot/uImage
设备树镜像:linux-4.14.2_iTop-4412_scp/arch/arm/boot/dts/exynos4412-itop-elite.dtb
WSL-Ubuntu18.04下搭建
提前准备好如下工具和文件:
工具 | 描述 | 使用方法 |
---|---|---|
device-tree-compiler | 设备树编译器(64bit) | sudo apt-get install device-tree-compiler |
mkimage | 打包工具(64bit) | sudo apt-get install u-boot-tools |
itop4412_kernel_4_14_2_bsp-20190225.tar.gz | 设备树源码包,在4412设备树相关视频下找到。 | |
gcc-arm-linux-gnueabihf | gcc交叉编译工具 | sudo apt-get install gcc-arm-linux-gnueabihf |
操作方法如下:
-
安装mkimage工具
1
sudo apt-get install u-boot-tools
-
安装装设备树编译器:
1
sudo apt-get install device-tree-compiler
-
解压源码包:
1
tar -vxf itop4412_kernel_4_14_2_bsp-20190225.tar.gz
-
进入源码包解压后的目录,删除gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz文件
1
rm gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz
-
安装交叉gcc编译器
1
sudo apt-get install gcc-arm-linux-gnueabihf
-
进入源码包解压后的目录,修改编译器
修改uboot源码包中编译器:
vim u-boot-2017.11/u-boot-2017.11/Makefile
修改kernel源码包中编译器:
vim linux-4.14.2_iTop-4412_scp/Makefile
均修改编译器配置如下:
1
CROSS_COMPILE := arm-linux-gnueabihf-
-
上述完成后,执行源码包目录中编译全部的脚本
1
./build_all.sh
没报错就成功了。
脚本内容:
build_all.sh
是uboot、kernel和设备树一起编译的脚本;
u-boot-2017.11/u-boot/build.sh
是单独编译uboot的脚本;
linux-4.14.2_iTop-4412_scp/build_kernel.sh
是单独编译内核的脚本;其中编译配置是其下的linux-4.14.2_iTop-4412_scp/arch/arm/configs/iTop-4412_scp_defconfig
文件,脚本执行中该文件会覆盖.config
文件。
镜像生成地址:
uboot镜像:u-boot-2017.11/u-boot/u-boot-iTOP-4412.bin
内核镜像:linux-4.14.2_iTop-4412_scp/arch/arm/boot/uImage
设备树镜像:linux-4.14.2_iTop-4412_scp/arch/arm/boot/dts/exynos4412-itop-elite.dtb
镜像烧写
首先,烧写需要更新uboot为支持设备树的uboot,也就是我们上面生成的u-boot-iTOP-4412.bin。
按照之前的烧写方法更新uboot 这里。
1
2
fastboot.exe flash bootloader u-boot-iTOP-4412.bin
fastboot reboot
然后重启回车进入新的uboot,转cmd烧写使用命令:fastboot 0
如果原来的 adb 驱动失效了,就检查一下驱动安装,完成后选择性执行下面的指令进行烧写:
1
2
3
4
5
fastboot.exe flash bootloader u-boot-iTOP-4412.bin
fastboot.exe flash kernel uImage
fastboot.exe flash dtb exynos4412-itop-elite.dtb
fastboot.exe flash system system.img
fastboot reboot
注意第一次操作时会有一些坑:
坑1:开发板启动后提示“Waiting for root device /dev/mmcblk0p2…”
说明配置文件(kernel)arch/arm/configs/iTop-4412_scp_defconfig
中root指定有误。
将CONFIG_CMDLINE="root=/dev/mmcblk0p2 console=ttySAC2,115200 init=/linuxrc rootwait"
改为:CONFIG_CMDLINE="root=/dev/mmcblk1p2 console=ttySAC2,115200 init=/linuxrc rootwait"
坑2:启动后文件系统不可写。
添加rw权限,继续将内核配置上面改为:CONFIG_CMDLINE="root=/dev/mmcblk1p2 rw console=ttySAC2,115200 init=/linuxrc rootwait"
坑3:启动后控制台一直打印tty2、3、4的错误。
将文件系统文件/etc/init.d/rcS
中ln...tty2、3、4
这样的命令屏蔽。创建最小系统
坑4:fastboot烧写中出现“FAILED (status malformed (0 bytes))”提示
实际不影响烧写。
坑5:有usb hub驱动但是没有设备信息,需要手动添加;所以暂时无法用U盘和网口
具体是不存在usb3503A设备信息,但驱动存在并且默认被编译。DM9621A网卡的兼容驱动dm9601默认编译。
添加以下信息到设备树linux-4.14.2_iTop-4412_scp/arch/arm/boot/dts/exynos4412-itop-elite.dts中根节点中,添加重烧后会发现网卡灯亮起。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
usbphy:usbphy@125B0000{
#address-cells=<1>;
#size-cells=<1>;
compatible="samsung,exynos4x12-usb2phy";
reg=<0x125B0000 0x100>;
ranges;
clocks=<&clock 2>,<&clock 305>;
clock-names="xusbxti","otg";
usbphy-sys{
reg=<0x10020704 0x8 0x1001021c 0x4>;
};
};
ehci@12580000{
status="okay";
usbphy=<&usbphy>;
};
usb3503@08{
compatible="smsc,usb3503";
reg=<0x08 0x4>;
connect-gpios=<&gpm3 3 1>;
intn-gpios=<&gpx2 3 1>;
reset-gpios=<&gpm2 4 1>;
initial-mode=<1>;
};