一、项目概要图
二、Linux环境搭建
2.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 3.5、4.0: /*******************************************************************/
蓝牙环境搭建 WiFi环境搭建 ZigBee环境搭建 /*******************************************************************/
2.2一些必要的库的安装:
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils ncurses-term zlib1g-dev libncurses5-dev gawk subversion libz-dev (整个这一行所需要安装的包必须执行安装)
sudo apt-get update 更新源:当包安装不成功的时候可以尝试执行
sudo apt-get -f install 更新依赖:当更新源之后还是安装不成功时可以尝试
sudo apt-get install 包名
2.3交叉编译环境搭建
2.3.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 gcc-4.4.6.tar.xz gcc-4.5.1.tar.xz
2.3.2环境变量的添加
修改文件/etc/bash.bashrc添加如下内容
sudo vi /etc/bash.bashrc export PATH=$PATH:/home/fengjunhui/toolchain/gcc-4.6.4/bin
2.3、重启配置文件 $ source /etc/bash.bashrc
2.3.3查看环境变量:
fengjunhui@ubuntu:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/fengjunhui:/home/fengjunhui/toolchain/gcc-4.6.4/bin
2.3.4工具链的测试
$ arm-none-linux-gnueabi-gcc –v
Using built-in specs. COLLECT_GCC=arm-none-linux-gnueabi-gcc
最后两行: Thread model: posix
gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 - tc0002)
2.3.5扩展:
Ubuntu14.04 Ubuntu16.04. 64位系统的安装需要先安装如下两个包:
/bash/... path/arm-none-linux-gnueabi-gcc not fount
sudo apt-get install lib32z1 lib32ncurses5
2.4 tftp环境搭建
uImage === 内核 设备树 exynos4412-fs4412.dtb exynos4412-origen.dtb
uImage、设备树文件都可以通过tftp从Ubuntu所在的tftp服务器端来加载。
板子 : 客户端
Ubuntu : 服务器端 C-S
1.1、检查tftp服务器是否存在: dpkg -s tftpd-hpa
1.2、未安装:sudo apt-get install tftpd-hpa tftp-hpa
通过安装时的打印信息,来确定在etc目录下的配置文件
2.4.1 修改配置文件
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"
2.4.2 创建tftp服务器所在的路径:
mkdir /home/linux/tftpboot -p //和配置文件的名字和路径必须保持一致
chmod 777 tftpboot //修改tftp服务器文件夹的权限
2.4.3 重启tftp服务器
linux@ubuntu:~$ sudo service tftpd-hpa restart
tftpd-hpa stop/waiting
tftpd-hpa start/running, process 6439
板子启动加载内核的时候经常遇到TTTTTTT.....
判断:网络不通
ping不通,网络配置有关
tftp服务器没有启动
2.4.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文件。
2.4.5 本地回环可能遇到的问题
可能遇到的问题参考:
tftp>get file
Transfertimed out.
原因: tftpd服务没有启动,重启tftp服务器:sudo service tftpd-hpa restart
tftp>get file
Errorcode 2: Only absolute filenames allowed
原因:在/etc/xinetd.d/tftpd中设置的server_args为/etc/default/tftpd-hpa
tftp>put file
Errorcode 1: File not found
原因:当前目录下指定的文件file不存在;或tftpd启动参数中没有指定-c选项,允许上传文件
2.5 nfs环境搭建
nfs:网络文件系统 /nfsroot=...
内核起来的时候,在最后会加载文件系统,(根据你的参数去加载文件系统)
ramdisk yaffs..... ext2
1、安装
sudo apt-get update //更新一下源
sudo apt-get -f install //更新一下依赖
sudo apt-get install nfs-kernel-server //如果不存在,就在线下载并安装
2、修改nfs配置文件:
mkdir ~/source
cp rootfs.tar.gz .
tar xvf rootfs.tar.gz
在这个目录下有这两个文件
linux@ubuntu:~/source$ pwd
/home/linux/source
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帐号权限;
3、重启nfs服务器
sudo /etc/init.d/nfs-kernel-server restart
2.6 网络环境搭建
图形化配置静态IP,(建议采用这种方式进行学习)
无线局域网适配器 无线网络连接: (提供大家上网)
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::e937:86f:d0a6:a442%11
IPv4 地址 . . . . . . . . . . . . : 192.168.31.137
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.31.1
2.7 Uboot引导盘制作
(注:uboot的移植过程不作为项目中的一个重点,只要能加载内核就好。)
5.1、将sd卡加载到windows下,识别SD卡之后,将SD卡格式化。(注意此时Ubuntu不要连接)。
5.2、将SD卡在Ubuntu中识别: 节点: /dev/sdb
/dev/mmcblk0 ---->sudo ./mkuboot.sh ----> sudo mv /dev/mmcblk0 /dev/sdb
fengjunhui@ubuntu:~/uboot$ cd sdfuse_q_2013/
fengjunhui@ubuntu:~/uboot/sdfuse_q_2013$ ls
add_padding add_sign.c Makefile sd_fusing_exynos4x12.sh
add_padding.c chksum mkuboot.sh u-boot-fs4412.bin
add_sign chksum.c
制作uboot引导:
fengjunhui@ubuntu:~/uboot/sdfuse_q_2013$ sudo ./mkuboot.sh
[sudo] password for fengjunhui:
Fuse FS4412 trustzone uboot file into SD card
/dev/sdb reader is identified.
u-boot-fs4412.bin fusing...
1029+1 records in
1029+1 records out
527104 bytes (527 kB) copied, 3.49821 s, 151 kB/s
u-boot-fs4412.bin image has been fused successfully.
Eject SD card
SecureCRT串口配置:putty xshell
5.5、板子上电:
Checking Boot Mode ... EMMC4.41
Net: dm9000
Hit any key to stop autoboot: 0
FS4412 # (能进入到这里)
2.8 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了。