环境搭建
一、开发板运行Linux需要的原料
1.1 u-boot-fs4412.bin
开机运行的第一个裸机程序被称为bootloader,主要负责:
- 加载内核可执行文件到内存运行
- 给待运行的内核准备好启动参数
- 加载二进制设备树文件到内存
- 安装系统
u-boot是一个开源的bootloader程序,u-boot-fs4412.bin由其源码编译生成,详情见《系统移植之u-boot移植》课程
1.2 uImage
Linux内核的裸机可执行文件,由Linux源码编译生成,编译过程参见本章第三节,或参见《系统移植之内核移植》课程
1.3 exynos4412-fs4412.dtb
ARM-Linux内核启动、运行过程中需要一些来自各芯片手册的编程依据,该文件专门用于记录这些依据
设备树文件有两种格式:
- .dts、.dtsi:文本形式,便于书写、修改
- .dtb:二进制形式,由.dts文件经专门工具处理后生成
1.4 rootfs.tar.xz
Linux内核运行成功后,需要运行第一个应用程序(即祖先进程)以及后续其它应用程序
而任何应用程序的运行需要各种文件的支持,如:可执行文件、库文件、配置文件、资源文件
这些文件的持久保存和按路径访问需要外存分区特定文件系统的支持
rootfs就是Linux系统根目录所在的分区,其内包含根分区下众多常用app所需的文件
根分区的制作过程请见《系统移植之根文件系统的制作》课程
rootfs.tar.xz文件是根分区打包生成的压缩文件
为了统一起见:
- 大家ubuntu版本统一为ubuntu14.04 32位版,否则有些安装步骤可能有变化
- 大家统一在ubuntu系统登录用户家目录下创建文件夹fs4412,用于存放后面安装环境所用的所有文件,过程如下:
1. cd ~
2. mkdir fs4412
3. 将uImage u-boot-fs4412.bin exynos4412-fs4412.dtb gcc-4.6.4.tar.xz mkimage rootfs.tar.xz sdfuse_q.zip linux-3.14-fordriver.tgz等8个文件传到~/fs4412目录下备用
二、交叉工具链的安装
cd ~/fs4412
sudo tar xvf gcc-4.6.4.tar.xz -C /opt
cd /opt/gcc-4.6.4/bin
pwd
#复制pwd命令的输出结果 ------ 完整的绝对路径
cd ~
vim .bashrc
#在.bashrc文件的最后一行添加:export PATH=$PATH:第6步复制的路径
#保存退出.bashrc
. .bashrc #让第9、10步的修改生效
arm加两次tab键,能看到一坨的arm-none-linux开头的显示则说明安装成功
三、tftp安装
#安装tftp-hpa tftpd-hpa:
sudo apt-get install tftp-hpa tftpd-hpa
sudo mkdir /tftpboot #创建tftp服务端共享目录
sudo chmod -R 777 /tftpboot #修改目录权限
#修改服务端配置文件---tftpd-hpa
sudo vim /etc/default/tftpd-hpa
#文件内容如下:
#RUN_DAEMON="no"
#OPTIONS="-s /tftpboot -c -p -U tftpd"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
#运行服务端
sudo service tftpd-hpa restart
#测试
cd /tftpboot
touch xxx
vim xxx #随便输入一些内容后保存退出
cd ~
tftp 127.0.0.1
tftp>get xxx
tftp>q
cat xxx #查看xxx内容为上面输入的内容则表示安装成功,否则安装过程有问题
四、NFS安装
#nfs 安装
sudo apt-get install nfs-kernel-server
#编辑服务端配置文件----/etc/exports
sudo vim /etc/exports
#在其内添加一行,内容如下:
/opt/4412/rootfs *(rw,sync,no_root_squash,no_subtree_check)
#创建挂载点目录并修改挂载点目录的访问权限
sudo mkdir /opt/4412/rootfs -p
sudo chmod 777 /opt/4412/rootfs
#启动NFS服务端(每一次修改/etc/exports都要重启nfs)
sudo service nfs-kernel-server restart
sudo service rpcbind restart
#验证安装是否正确
#在/opt/4412/rootfs下创建一个空文件
cd /opt/4412/rootfs
touch test
sudo mount 127.0.0.1:/opt/4412/rootfs /mnt
#127.0.0.1(这是被挂目录的主机IP)
#ubuntu上NFS服务器上被挂目录的绝对路径/opt/4412/rootfs
#/mnt(挂载的目的地)
ls -l /mnt #如果有test的话就说明ok了
sudo rm /mnt/test
sudo mount /mnt #卸掉挂载的目录
五、制作SD卡启动盘
5.1 方法1:在Linux下制作
一、准备好烧录脚本
cd ~/fs4412
unzip sdfuse_q.zip
cd sdfuse_q
chmod +x *.sh
二、将SD卡插入USB读卡器,并连接到虚拟机
三、烧录
cp ../u-boot-fs4412.bin .
sudo ./mkuboot.sh #烧录
#原理说明
#dd if=u-boot-fs4412.bin of=/dev/sdb seek=1
5.2 方法2:在Windows下制作
ubuntu Linux下执行以下命令制作u-boot-fs4412.img
cd ~/fs4412
mkdir win-sd
cp ./u-boot-fs4412.bin ./win-sd
cd win-sd
dd if=/dev/zero of=sector0 bs=512 count=1
cat sector0 u-boot-fs4412.bin > u-boot-fs4412.img
将u-boot-fs4412.img文件传到windows下,放到一个路径不含任何中文的目录下
windows下解压“SD卡烧写.rar”文件
解压后双击运行其中的Win32DiskImager.exe来烧写u-boot-fs4412.img到SD卡(步骤见下图)
- 将SD卡插入卡槽或者将SD卡插入读卡器后将读卡器插入USB接口
- 运行Win32DiskImager.exe,在上图1处看能不能识别出SD卡的盘符,如不能请检查连接情况
- 点击2处按钮,在出现的窗口里找到并选中u-boot-fs4412.img文件
- 点击3处Write按钮开始烧写并等待完成后安全拔出SD卡
六、串口终端设置
安装TeraTerm串口终端软件,安装过程:一路下一步
将USB转串口线插入电脑USB接口
双击运行TeraTerm选择串口后点击确定:
设置串口通讯参数:
设置字体:
验证串口连接和制作好SD卡:
-
USB转串线9针端连接开发板三个9孔母口的COM2(中间的那个)
-
开发板启动模式开关设置为下图形式
-
开发板插入电源,打开开关,观察串口终端软件界面有没有正常内容显示,没有则认真检查前面的操作
七、u-boot参数设置
串口终端软件界面下,给开发板加电,刚加电时有几秒的倒计时,在倒计时时间内,敲空格键可以进入u-boot命令行
在u-boot命令行下一次执行如下u-boot命令:
u-boot# setenv serverip 192.168.9.16
u-boot# setenv ipaddr 192.168.9.99
u-boot# setenv gatewayip 192.168.9.1
u-boot# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000
u-boot# setenv bootargs root=/dev/nfs nfsroot=192.168.9.16:/opt/4412/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.9.99
u-boot# saveenv
网线连接开发板和主机,验证双方网络是否畅通
主机侧网络设置:
先关闭虚拟ubuntu系统
开发板侧-----串口终端软件界面
u-boot# ping 192.168.9.16
#出现is alive表示网络畅通,否则检查网线连接和网络设置
八、开发板运行Linux
1. 网线连接开发板和主机
2. ubuntu下拷贝uImage、exynos4412-fs4412.dtb两个文件到/tftpboot目录下
cd ~/fs4412
cp uImage exynos4412-fs4412.dtb /tftpboot
3. rootfs.tar.xz解压到/opt/4412
sudo tar xvf rootfs.tar.xz -C /opt/4412
sudo chmod 777 /opt/4412/rootfs
4. 启动tftp服务
sudo service tftpd-hpa restart
5. 开发板加电,观察串口终端软件界面,看能不能进入Linux命令行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiUVtHvC-1667819959057)(.\Linux启动OK.jpg)]
九、内核编译
sudo apt-get install libncurses5-dev #如已安装则跳过本步
cd ~/fs4412
sudo cp ./mkimage /sbin
sudo chmod 777 /sbin/mkimage
tar zxvf linux-3.14-fordriver.tgz
cd linux-3.14
make fs4412_defconfig
make uImage -j2 #有代码变更需重新生成uImage时,执行本步骤
#将在arch/arm/boot目录下生成uImage文件,拷贝uImage到/tftpboot下启动开发板可以验证uImage的正确性
make dtbs #设备树源文件被更改需重新生成dtb文件时,执行本步骤
#将在arch/arm/boot/dts目录下生成exynos4412-fs4412.dtb文件
#拷贝exynos4412-fs4412.dtb到/tftpboot下启动开发板可以验证exynos4412-fs4412.dtb的正确性
cd linux-3.14
make fs4412_defconfig
make uImage -j2 #有代码变更需重新生成uImage时,执行本步骤
#将在arch/arm/boot目录下生成uImage文件,拷贝uImage到/tftpboot下启动开发板可以验证uImage的正确性
make dtbs #设备树源文件被更改需重新生成dtb文件时,执行本步骤
#将在arch/arm/boot/dts目录下生成exynos4412-fs4412.dtb文件
#拷贝exynos4412-fs4412.dtb到/tftpboot下启动开发板可以验证exynos4412-fs4412.dtb的正确性