驱动初级Day01_环境搭建

一、开发板运行Linux需要的原料

1.1 u-boot-fs4412.bin

开机运行的第一个裸机程序被称为bootloader,主要负责:

  1. 加载内核可执行文件到内存运行
  2. 给待运行的内核准备好启动参数
  3. 加载二进制设备树文件到内存
  4. 安装系统

u-boot是一个开源的bootloader程序,u-boot-fs4412.bin由其源码编译生成,详情见《系统移植之u-boot移植》课程

1.2 uImage

Linux内核的裸机可执行文件,由Linux源码编译生成,编译过程参见本章第三节,或参见《系统移植之内核移植》课程

1.3 exynos4412-fs4412.dtb

ARM-Linux内核启动、运行过程中需要一些来自各芯片手册的编程依据,该文件专门用于记录这些依据

设备树文件有两种格式:

  1. .dts、.dtsi:文本形式,便于书写、修改
  2. .dtb:二进制形式,由.dts文件经专门工具处理后生成

1.4 rootfs.tar.xz

Linux内核运行成功后,需要运行第一个应用程序(即祖先进程)以及后续其它应用程序

而任何应用程序的运行需要各种文件的支持,如:可执行文件、库文件、配置文件、资源文件

这些文件的持久保存和按路径访问需要外存分区特定文件系统的支持

rootfs就是Linux系统根目录所在的分区,其内包含根分区下众多常用app所需的文件

根分区的制作过程请见《系统移植之根文件系统的制作》课程

rootfs.tar.xz文件是根分区打包生成的压缩文件

为了统一起见:

  1. 大家ubuntu版本统一为ubuntu14.04 32位版,否则有些安装步骤可能有变化
  2. 大家统一在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卡(步骤见下图)

在这里插入图片描述

  1. 将SD卡插入卡槽或者将SD卡插入读卡器后将读卡器插入USB接口
  2. 运行Win32DiskImager.exe,在上图1处看能不能识别出SD卡的盘符,如不能请检查连接情况
  3. 点击2处按钮,在出现的窗口里找到并选中u-boot-fs4412.img文件
  4. 点击3处Write按钮开始烧写并等待完成后安全拔出SD卡

六、串口终端设置

安装TeraTerm串口终端软件,安装过程:一路下一步

将USB转串口线插入电脑USB接口

双击运行TeraTerm选择串口后点击确定:

在这里插入图片描述

设置串口通讯参数:
在这里插入图片描述

在这里插入图片描述

设置字体:
在这里插入图片描述

在这里插入图片描述

验证串口连接和制作好SD卡:

  1. USB转串线9针端连接开发板三个9孔母口的COM2(中间的那个)

  2. 开发板启动模式开关设置为下图形式
    在这里插入图片描述

  3. 开发板插入电源,打开开关,观察串口终端软件界面有没有正常内容显示,没有则认真检查前面的操作

七、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的正确性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自然醒欧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值