- 硬件平台:友善之臂Exynos4412
- 系统:linux-3.5-20160514
- 编译器:arm-linux-gcc-4.5.1
- 虚拟机:centos7 64位
- 虚拟机平台:vmware16
参考:tiny4412学习(一)之从零搭建linux系统(烧写uboot、内核进emmc+uboot启动内核)_tiny4412 uboot 启动 参数_【星星之火】的博客-优快云博客
1、安装交叉编译环境
arm-linux-gcc-4.5.1链接:
https://pan.baidu.com/s/1kQKCmHKKY0pyTh7PTNs1eg?pwd=nj4p 提取码: nj4p
(1)解压编译器源码
tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /
执行后将把 arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1 目录。
(2) 在usr/local/目录下创建arm文件夹,并将解压缩的文件夹/opt/FriendlyARM/toolschain/4.5.1/拷贝到/usr/local/arm/目录:
mkdir /usr/local/arm
cp opt/FriendlyARM/toolschain/4.5.1/ /usr/local/arm/ -rf
(3)修改环境变量:
vim ~/.bashrc
在其中添加
export PATH=/usr/local/arm/4.5.1/bin/:$PATH
(4)安装链接库
如果是centos7: yum install xulrunner.i686
如果是ubuntu:apt-get install lib32z1
如果是32位的机子,则不需要第四步,如果是64位的机子,则必须进行第四步
(5)重启虚拟机使之生效或者刷新环境
reboot
或者source ~/.bashrc
使配置文件生效。
(6) 检测交叉编译环境是否安装成功:
arm-linux-gcc -v
如果出来这样的字样,则说明成功。
2、编译内核
linux-3.5-20160514链接:
https://pan.baidu.com/s/1_t7e80_J_9pkjPUaOHRlDg?pwd=78i7 提取码: 78i7
(1)解压
解压 Linux 内核源代码
tar xvzf linux-3.5-20160514.tgz
cd linux-3.5
(2)配置
cp tiny4412_linux_defconfig .config
make menuconfig
如果make menuconfig后,出现以下结果
* Unable to find the ncurses libraries or the
* required header files.
* ‘make menuconfig’ requires the ncurses libraries.
* Install ncurses (ncurses-devel) and try again.
make[1]: * [scripts/kconfig/dochecklxdialog] Error 1
make: * [menuconfig] Error 2
解决方法很简单,安装ncurses库即可
yum install -y ncurses-devel
执行make menuconfig时终端窗口必须大于19列80行
- 编译Tiny4412提供的内核的时候,需要先将内核的TrustZone关闭,否则无法正常启动内核。
位置在System Type ---->中的
取消选择Support TrustZone-enabled Trusted Execution Environment
键盘上空格按键可以选择,esc可以退出
(3)编译
make
最后在 arch/arm/boot 目录下生成 zImage,则说明编译成功
编译的时候比较长,所以需要等待几分钟
3、制作根文件系统----本部分没有采用。该部分采用光盘提供的文件ramdisk-u.img,rootfs_qtopia_qt4.img
ramdisk-u.img链接:
https://pan.baidu.com/s/1vwUDBVFRlJlJ3iBWRAn00A?pwd=fjty 提取码: fjty
rootfs_qtopia_qt4.img链接:
https://pan.baidu.com/s/1YbR4EcsaqLjJ3p4qWSfvgA?pwd=zptb 提取码: zptb
4、编译uboot
uboot_tiny4412链接:
https://pan.baidu.com/s/10bWFvx-ljEXMffMEqSQhhg?pwd=ryp7 提取码: ryp7
(1)解压:
unzip uboot_tiny4412_new.zip
(2)编译
cd uboot_tiny4412-master
make tiny4412_config
make
如果是以下图片中的,则说明编译成功
编译 用于生成bl2 的工具
cd sd_fuse
make
假设SD卡已被PC Linux识别为/dev/sdb, 以root用户运行以下命令即可:
cd sd_fuse/tiny4412
./sd_fusing.sh /dev/sdb
如果在./sd_fusing.sh /dev/sdb这一步的时候报错
我们需要改一下sd_fusing.sh 文件
vim sd_fusing.sh
出现以下图片中的则说明烧录成功
接下来就是如何下载,并启动内核,挂接文件系统了。
5、下载uboot到emmc
(1)之前我们已经将uboot下载到SD卡,现在从SD卡启动uboot,可以看到如下信息:

(2)查看设备的分区表信息
以下操作在串口调试助手
SecureCRT链接:
https://wwbz.lanzoue.com/inEKQ0urande 密码:e94t
参考一下链接进行破解:https://www.cnblogs.com/qlgj/p/13960699.html
putty链接:
https://pan.baidu.com/s/1Mq9l5Uwh862R8mUTQsk2-g?pwd=wn2x 提取码: wn2x
fdisk -p 0
fdisk -p 1
设备mmc1的分区信息,即eMMC分析,注意这个是superboot分区信息,我们就用这个分区。
分区1 是FAE分区, 分区2 是给system的,分区3是user-data, 分区4 是 cache.
(3)格式化eMMC
u-boot模式下输入如下指令来格式化eMMC设备。
fdisk -c 1 320 2057 520
执行后会返回分区信息,继续格式话分区1,2,3,4
fatformat mmc 1:1
这句话意思是对mmc 1设备的第一分区格式作fat格式化。
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4
上面三个指令是分别对eMMC的分区2,3,4作ext3格式化。
到此我们完成了对eMMC的设备的格式化。
(4)如果提示如下错误:
Error: No MBR is found at SD/MMC.
Hint: use fdisk command to make partitions.
则先执行指令"fdisk -c 0",执行过程如下:
fdisk -c 0
fdisk is completed
对emmc初始化后,我们开始使用dnw来下载uboot到emmc中。现在我们就需要装一下linux的dnw工具,注意dnw是下载到内存,把固件数据缓存起来,然后烧录到eMMC中
6、Linux下DNW工具安装:
dnw链接:
https://wwbz.lanzoue.com/iGCL80ur0haf 密码:bd45
(1)解压缩文件
tar xvf dnw-linux.tar.gz
(2)修改文件
cd dnw-linux/
cd src/
cd driver/
vim Makefile
vim secbulk.c
(3)编译文件
cd ../..
ls
make
出现上面那样就是编译成功。
(4)加载模块到Linux内核:
sudo insmod ./secbulk.ko (注意如果在root登录权限下,sudo命令不需要,以下同)
dmesg (查看是否加载成功)
secbulk:secbulk loadedusbcore:registered new interface driversecbulk (看到这样两行就说明成功了)
开机的时候不会自动加载.ko文件,这样每次都要先加载才可以使用,此时将其加入开机脚本,
使其得到自动加载,编辑/etc/init.d/rc.local 在最后加上 insmod /所在路径/secbulk.ko。
(5) 将dnw文件copy到/usr/local/bin目录
cd src/dnw/
ls
cp dnw /usr/local/bin
则输入dnw出现以下说明安装成功
(6)DNW下载好了,我们可以把uboot下载到emmc了。
以下操作#uboot是在串口助手里执行,#虚拟机是在centos7里执行
千万别忘了先打开保存!!!
#uboot:emmc open 1
上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧录,烧录完成后可以关闭emmc
#uboot:dnw 40000000
提示:OTG cable Connected!
Now, Waiting forDNW to transmit data(等待DNW下载)
注意虚拟机里面有一根usb线跳出来需要连接到虚拟机
打开虚拟机,进入uboot所在目录
cd /uboot_tiny4412-master
#虚拟机:dnw -a 40000000 sd_fuse/tiny4412/E4412_N.bl1.bin
此时u-boot中断会提示传送校验完成,此时已经把bl1.bin通过USB传送到了memeory的0x40000000起始地址,大小8KB.
接下来我们烧录bl1.bin到eMMC中,u-boot下继续输入:
#uboot:mmc write 1 0x40000000 0 0x10
会提示写入信息,说明已经写入成功。这个是把刚才从PC端通过dnw下载下来的bl1.bin固件下载到emmc中,起始0, 16个block, 一个block是512B, 16*512=8*1024=8KB. 这个是bl1.bin的存放位置。
以此类推,烧录bl2.bin. u-boot.bin, tzsw.bin
#uboot:dnw 40000000
#虚拟机:dnw -a 40000000 sd_fuse/tiny4412/bl2.bin
#uboot:mmc write 1 0x40000000 0x10 0x1C
#uboot:dnw 40000000
#虚拟机:dnw -a 40000000 u-boot.bin
#uboot:mmc write 1 0x40000000 0x30 0x21D
#uboot:dnw 40000000
#虚拟机:dnw -a 40000000 sd_fuse/tiny4412/E4412_tzsw.bin
#uboot:mmc write 1 0x40000000 0x2c0 0xB8
启动分区到此全部写入完成,注意一定要关闭emmc
u-boot下继续输入:
#uboot:emmc close 1
提示:eMMC CLOSE Success.!!
现在uboot已经完整的烧入到emmc,我们可以将开关波动到NAND一侧,从emmc启动,发现uboot输出已经变成了:
7、下载内核到emmc
fastboot链接:fastboot.rar - 蓝奏云
这里下载的东西跟第三步制作根文件系统那下载的是一样的,如果上面下载了,此处不需要下载
ramdisk-u.img链接:
https://pan.baidu.com/s/13S-KeInDsutRR5Zh0hudUA?pwd=5gqv 提取码: 5gqv
rootfs_qtopia_qt4.img链接:
https://pan.baidu.com/s/1gMcVZr588u5qBI14I1OCUA?pwd=pt7a 提取码: pt7a
zImage在linux-3.5/arch/arm/boot/目录下
通过共享的软件将zImage分享到你的windows中,推荐使用共享文件夹(samba服务器等),或者软件xftp等等
内核下载我们采用fastboot下载,uboot已经支持了fastboot。
安装windows下fastboot工具
下载我们进入uboot,执行fastboot,并将单板的usb接到PC。提示如下:
windows下cmd进入fastboot.exe所在目录
将zImage,ramdisk-u.img,rootfs_qtopia_qt4.img 复制粘贴到fastboot目录下
然后再cmd窗口输入以下几步
fastboot flash kernel zImage
fastboot flash ramdisk ramdisk-u.img
fastboot flash fat rootfs_qtopia_qt4.img
fastboot reboot
如果在输入时出现wait...时, 则需要下载驱动精灵升级Android,进入驱动精灵的驱动管理时,第一个就是Android,升级即可成功
驱动精灵:驱动精灵_驱动更全、匹配更准、下载更快!
此时,我们已经将uboot、内核下载到单板中。
开发板屏幕出现以下图片:
并且串口助手出现以下图片
则说明成功。
8、ftp传输的搭建
设备连接:
交叉网线
串口线
usb线
电源线
(1)查看开发板的ip地址
(2)打开电脑的控制面板
查看是否有以太网:
保存退出。
进入vmware
确定保存退出。
然后在虚拟机里面输入 ftp 开发板的ip
连接需要差不多一分钟吧,耐心等待。
连接成功进行用户名及密码的输入
在串口调试助手上面可以看到
注:传过去的文件都需要赋权限,图中的 chmod命令为:chmod 777 test才能执行
因此,在进行linux驱动程序开发过程中,当主机完成驱动程序模块ko文件的编译后,可以通过FTP的方式将文件下载到实验板中进行调试验证。
再进行传输的时候也可以通过U盘,nfs等方式,如果ftp建立连接不了,试一试其他方式。
现在搭建环境的工作已经做完了,希望可以帮助到大家!!!