TINY4412 Uboot移植并启动内核+文件系统

2019-07-12 23:23发布

系统:Ubuntu 18.04.1 LTS amd64
编译工具链: arm-linux-gcc version 4.4.3
一、 下载uboot源码:
创建Src文件夹用来保存源码,并下载源码:
mkdir Src
wget https://codeload.github.com/friendlyarm/uboot_tiny4412/zip/master
在这里插入图片描述
解压:unzip master
二、 Uboot编译
1、关闭MMU
进入源码目录:cd uboot_tiny4412_master
打开文件include/configs/tiny4412.h
将311行 #define CONFIG_ENABLE_MMU#define CONFIG_ENABLE_MMU
修改为:
#undef CONFIG_ENABLE_MMU
在这里插入图片描述
打开board/Samsung/tiny4412下的config.mk文件,修改:
‘CONFIG_SYS_TEXT_BASE = 0xc3e00000’
为:
‘CONFIG_SYS_TEXT_BASE = 0x43e00000’
在这里插入图片描述
2、编译uboot
在顶层目录中:
make tiny4412_config
make
之后会生成u-boot.bin文件
在这里插入图片描述
编译 用于生成bl2 的工具
make -C sd_fuse
在这里插入图片描述
三、sd卡制作
准备一张4G或以上的SDHC卡
注意:该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
将sd卡插在电脑上,在使用windows的磁盘管理工具删除所有分区并进行格式化。
在这里插入图片描述
在这里插入图片描述 将sd卡连接到虚拟机上,在/dev/下会有mmcblk0文件。(不同的电脑生成的文件不同 大多数是/dev/sdb)
以root用户运行以下命令即可:
cd sd_fuse/tiny4412
sudo ./sd_fusing.sh /dev/mmcblk0
在这里插入图片描述
四、使用sd卡中制作好的uboot启动开发板
将开发板的串口与PC连接,microUSB接口也连接好。
在pc端打开minicom并配置好参数
sudo minicom
在这里插入图片描述
将开发板开关选择在S2,上电启动开发板:
在这里插入图片描述 可以看到uboot已经顺利启动成功。
接下来需要我们烧写操作系统,包括内核,文件系统等等,以保证uboot可以启动操作系统。
五、编译linux内核
这里我们使用友善提供的linux3.5版本。在Src下准备好linux内核源码压缩包并解压后。
进入linux内核源码目录:
在这里插入图片描述
cp tiny4412_linux_defconfig .config
在这里插入图片描述
拷贝一份工程下为4412配置好的config文件。
make menuconfig打开配置菜单
在这里插入图片描述
我们可以发现有些选项已经设置好了,再此基础上我们打开下列选项:
Kernel hacking----
Kernel low-level debugging functions (read help!)
在这里插入图片描述 在这里插入图片描述
Devices Drives-----
Character devices-------
Serial drivers-----
Samsung SoC serial support
在这里插入图片描述
这样做的目的是为了使uboot引导内核后,我们可以看到内核输出的一些debug信息。
接下来make –j4开启多线程编译
在这里插入图片描述
报错,我们打开timeconst.pl为文件进行源码修改:
第337行修改为:
在这里插入图片描述
make distclean
cp tiny4412_linux_defconfig .config
make menuconfig
做跟上面一样的配置
然后 make –j4
在这里插入图片描述
五、烧写操作系统
到此我们已经生成了内核镜像使用uboot下的fastboot工具将其下载到开发板上。
在minicom的uboot终端输入以下uboot命令即可对SD卡进行分区:
fdisk -c 0 320 806 518
在这里插入图片描述
重新分区后,可重新格式化FAT分区
fatformat mmc 0:1
在这里插入图片描述
使用fastboot命令进入fastboot模式以烧写kernel
在这里插入图片描述
在准备好的镜像文件目录下我们使用命令:
sudo fastboot flash kernel zImage
在这里插入图片描述
在uboot cmd中发现:
在这里插入图片描述
表示已经接收成功。
同理我们使用fastboot烧写文件系统ramdisk-u.img和系统镜像rootfs_qtopia_qt4.img这两个使用友善提供的现有文件就好,使用命令: sudo fastboot flash ramdisk ramdisk-u.img
sudo fastboot flash fat rootfs_qtopia_qt4.img 在uboot终端按下ctrl+c退出fastboot模式。
输入:
set bootargs console=ttySAC0,115200n8 向内核传递参数
set bootcmd movi read kernel 0 40008000;movi read rootfs 0 41000000 400000;bootm 40008000 41000000 设置启动参数
save
之后reset命令:
在这里插入图片描述
Uboot启动输出信息,再下面是:
在这里插入图片描述
可以看到内核的一些debug信息已经输出在串口上。
但是我们发现任然不能正常启动内核。这是因为linux_3.5的内核中默认开启了TrustZone,但是uboot不支持这个,友善提供的Superboot是支持的,所以我们在内核配置的时候关掉TrustZone.
make menuconfig
System Type---------
Support TrustZone-enabled Trusted Execution Environment
在这里插入图片描述
之后保存,make -j4 生成zImage使用fastboot下载到开发板之后,输出信息:
在这里插入图片描述
可以整个系统已经完全启动。因为debug信息输出在前面编译内核的时候有开启,所以输出的信息比较多。
输入命令试试看看:
在这里插入图片描述
可以通过串口终端操作内核,而且板子的界面上也有所显示,如下图所示:
在这里插入图片描述