一、开发环境搭建

本文详细介绍了如何搭建嵌入式Linux系统的开发环境,包括GCC交叉编译工具链的安装、环境变量配置、tftp和nfs服务器的设置。此外,还阐述了uboot引导盘的制作过程以及uboot环境变量的配置,确保了从启动到加载内核和根文件系统的顺利进行。整个流程涵盖了从硬件平台到软件环境的多个层面,为后续的嵌入式开发打下了坚实的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、要用到的

GCC编译器的环境: gcc4.6.4
Ubuntu版本:ubuntu14.04 或ubuntu16.04
Uboot版本:uboot2013.01
内核版本:Kernel-3.14.0
nfs:NFS(网络文件系统)为开发板和linux主机之间的通讯
tftp:tftp服务器用来实现开发板和linux主机之间文件的下载和上传
硬件平台:Cortex-A9(fs4412)、ZigBee,STM32,电脑主机(x86 x64)
软件环境:Keil、Ubuntu、 代码管理工具、超级终端、(Putty、xshell) SecureCRT、Git、 Source Insight 4.0

2、交叉编译环境搭建

64位系统的安装需要先安装如下两个包:
/bash/… path/arm-none-linux-gnueabi-gcc not fount
sudo apt-get install lib32z1 lib32ncurses5

2.1、解压工具链

下载地址 http://gcc.gnu.org/

cd ~
mkdir toolchain
cd toolchain
将下载的交叉编译工具/gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压
$ tar  xvf  gcc-4.6.4.tar.xz

2.2、添加环境变量

修改文件/etc/bash.bashrc

sudo vim /etc/bash.bashrc
export PATH=$PATH:/home/wxx/SecurityMonitor/toolchain/gcc-4.6.4/bin
重启配置文件
source  /etc/bash.bashrc

2.3、查看环境变量

wxx@wxx:~/SecurityMonitor$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/wxx/SecurityMonitor/toolchain/gcc-4.6.4/bin/

2.4、测试

$ arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/wxx/Linux_4412/toolchain/gcc-4.6.4/bin/../libexec/gcc/arm-arm1176jzfssf-linux-gnueabi/4.6.4/lto-wrapper
Target: arm-arm1176jzfssf-linux-gnueabi
Configured with: /work/builddir/src/gcc-4.6.4/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-arm1176jzfssf-linux-gnueabi --prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4 --with-sysroot=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot --enable-languages=c,c++ --with-arch=armv6zk --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp --with-pkgversion='crosstool-NG hg+default-2685dfa9de14 - tc0002' --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-mpfr=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-mpc=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-ppl=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-cloog=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-libelf=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --without-long-double-128 --disable-nls --disable-multilib --with-local-prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 - tc0002) 

3、tftp环境搭建

用途: uImage (内核)、 exynos4412-fs4412.dtb(设备树)文件都可以通过tftp从Ubuntu所在的tftp服务器端来加载
板子 : 客户端
Ubuntu : 服务器端 C-S

3.1、安装tftp服务器

首先检查tftp服务器是否存在: dpkg -s tftpd-hpa
若未安装:sudo apt-get install tftpd-hpa tftp-hpa
通过安装时的打印信息,来确定在etc目录下的配置文件

3.2、配置文件修改

sudo vi /etc/default/tftpd-hpa
#/etc/default/tftpd-hpa
#用户名
TFTP_USERNAME="tftp"
#你的tftp服务器所在的路径
TFTP_DIRECTORY="/home/linux/tftpboot"
#tftp服务器的网关和端口号
TFTP_ADDRESS="0.0.0.0:69"
#tftp 文件服务器的可供选择的权限, get file\ put file \ list file 
TFTP_OPTIONS="-l -c -s"

3.3、创建tftp服务器所在的路径

mkdir  /home/linux/tftpboot -p    //和配置文件的名字和路径必须保持一致
chmod 777 tftpboot     		      //修改tftp服务器文件夹的权限

3.3、重启tftp服务器

~$ sudo service tftpd-hpa restart
tftpd-hpa stop/waiting
tftpd-hpa start/running, process 6439

板子启动加载内核的时候经常遇到TTTTTTT… 可能原因有

  1. 网络不通
  2. ping不通,网络配置有关
  3. tftp服务器没有启动

3.4、本地回环测试

 tftp  127.0.0.1
 tftp>get main.c //下载文件从tftpboot目录下 (保证tftpboot目录下有你要下载的文件)
tftp>put while.c //上传文件到tftpboot目录下  (保证当前目录有你要上传的文件)
tftp>q            //退出 
查看当前文件目录,可以看到从tftpboot目录下载的main.c文件,打开tftpboot目录,可以看到while.c文件

3.5、常见问题

1. tftp>get file
Transfertimed out.
原因: tftpd服务没有启动,重启tftp服务器:sudo service tftpd-hpa restart 
2.tftp>get file
Errorcode 2: Only absolute filenames allowed
原因:在/etc/xinetd.d/tftpd中设置的server_args为/etc/default/tftpd-hpa
3. tftp>put file
Errorcode 1: File not found
原因:当前目录下指定的文件file不存在;或tftpd启动参数中没有指定-c选项,允许上传文件

4、nfs环境搭建

用途:通过nfs挂载根文件系统,/nfsroot=… 内核起来的时候,在最后会加载文件系统,(根据你的参数去加载文件系统)

4.1、安装

sudo apt-get update       //更新一下源
sudo apt-get -f install   //更新一下依赖
sudo apt-get install nfs-kernel-server   //如果不存在,就在线下载并安装

4.2、修改配置文件

mkdir ~/source
cp rootfs.tar.gz .
tar xvf rootfs.tar.gz  //解压
//当前目录下的文件
linux@ubuntu:~/source$ ls
rootfs  rootfs.tar.xz
//修改配置
sudo vim /etc/exports
添加如下内容:
/home/linux/source/rootfs  *(rw,sync,no_subtree_check,no_root_squash) 
路径==>nfs路径===>nfs又是什么?  一个路径*四个参数
其中:
	/home/linux/source/rootfs:共享的目录;
	*:不限定客户端;
	rw:共享目录可读可写;
	sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
	no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
	no_root_squash:来访的root用户保持root帐号权限;

4.3、重启nfs服务器

sudo /etc/init.d/nfs-kernel-server restart

5、uboot引导盘制作

目标:能引导加载内核
烧写工具默认从 0 扇区开始烧写,这里我们自己在 uboot 之前放一个 512 字节的空镜像

  1. 将资料中“u-boot 镜像”中的 u-boot-fs4412.bin 拷贝到 ubuntu 的家目录下

  2. 在终端输入如下命令,制作一个 512 字节的空镜像
    $ sudo dd if=/dev/zero of=zero.bin count=1
    显示如下信息,则表示制作成功
    在这里插入图片描述

  3. 执行如下命令,将 uboot 追加到 zero.bin 之后生成 win-u-boot-fs4412.bin
    $ cat zero.bin u-boot-fs4412.bin > win-u-boot-fs4412.bin

  4. 再执行如下命令,制作一个 1M 的空镜像(用于擦除 SD 卡中原有的数据)
    $ sudo dd if=/dev/zero of=clear.bin count=2048

  5. 把生成的 win-u-boot-fs4412.bin 和 clear.bin 拷贝到 windows 下
    在这里插入图片描述

  6. 将 SD 卡插入到电脑上(卡槽/USB 读卡器均可),使其在 windows 下识别(若不识别,可能是已经在 ubuntu 中识别了,在可移动设备中将其断开即可)

  7. 使用“Win32DiskImager”进行镜像文件的烧写

  8. 在弹出的界面中先选择要烧写的镜像文件(clear.bin),然后选择要烧写的设备(SD 卡)最后单击“Write”进行烧写
    在这里插入图片描述

  9. 在弹出的对话框中单击“Yes”
    在这里插入图片描述

  10. 在弹出的对话框中单击“OK”完成烧写
    在这里插入图片描述
    因为 clear.bin 为空镜像,所以写入后 SD 卡中的前 2048 个扇区中的数据被擦除

  11. 再选择 uboot 镜像完(win-u-boot-fs4412.bin),然后单击“Write”进行烧写
    在这里插入图片描述

  12. 在弹出的对话框中单击“Yes”
    在这里插入图片描述

  13. 在弹出的对话框中单击“OK”完成烧写
    在这里插入图片描述

  14. 将 SD 卡插入开发板的卡槽,调整拨码开关为 SD 卡启动,查看 uboot 是否能正常启动
    注:uboot 正常启动后 LED2 灯会点亮且终端上也会打印 uboot 相关的信

6.SecureCRT串口配置

在这里插入图片描述
在这里插入图片描述
配置Port端口(COM3)要与计算机中设备管理的端口号一致
配置适合的波特率Baud rate一般设置为115200,配置成功点击connect

7、uboot环境变量设置

7.1、板子上电

Checking Boot Mode ... EMMC4.41
Net:   dm9000
Hit any key to stop autoboot:  0 
FS4412 #  (能进入到这里)

7.2、uboot环境变量设置

输入printenv
set serverip 192.168.1.200
set ipaddr 192.168.1.100
set gatewayip 192.168.1.1
setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000
setenv bootargs root=/dev/nfs nfsroot=192.168.1.200:/home/fengjunhui/source/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.1.100

(C --- S )  Client  Server
setenv bootargs(传递给内核的启动参数) root=/dev/nfs(根文件挂载方式)192.168.1.200:/home/fengjunhui/source/rootfs  rw  console(制定打印信息的终端)=ttySAC2,115200(内核向串口输入信息)init=/linuxrc(指定内核运行第一个程序(缺省则从/sbin/init启动)) ip=192.168.1.100(指定本机ip) (超级终端显示如下图)
saveenv(保存到emmc中)一定要保存呐!!!

查看环境变量信息:
FS4412 # pri
gatewayip=192.168.1.1
baudrate=115200
bootargs=root=/dev/nfs nfsroot=192.168.1.200:/home/fengjunhui/source/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.1.100
bootcmd=tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000
bootdelay=3
ethact=dm9000
ethaddr=11:22:33:44:55:66
gatewayip=192.168.1.1
ipaddr=192.168.1.100
netmask=255.255.255.0
serverip=192.168.1.200
stderr=serial
stdin=serial
stdout=serial

Environment size: 474/16380 bytes

测试引导镜像启动:
fengjunhui@ubuntu:~/tftpboot$ ls
examples.desktop  exynos4412-fs4412.dtb  uImage  (保证无误)
FS4412 # boot 
 dm9000 i/o: 0x5000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 11:22:33:44:55:66
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.200; our IP address is 192.168.1.100
Filename 'uImage'.
Load address: 0x41000000
Loading: T #################################################################
380.9 KiB/s
done
Bytes transferred = 3705424 (388a50 hex)
.......
VFS: Mounted root (nfs filesystem) on device 0:10.
[    3.550000] devtmpfs: mounted
[    3.550000] Freeing unused kernel memory: 240K (c0677000 - c06b3000)
[root@farsight ]#       ok,成功进入文件系统。

好,到这里咱们基本的环境配置就OK了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值