提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、虚拟机配置环境
1.安装交叉编译工具
官方的名字叫做交叉编译工具,你可能觉得满脸问号,那么他还有另一个名字叫做ARM gcc。
由于我们写的是基于arm的代码,但linux的gcc只能编译x86的代码,所以需要一个特有的环境编写arm程序。
(1)复制arm gcc编译器的压缩文件到linux下,后解压。注意不能复制到共享文件路径下,要复制到纯linux的路径。解压命令tar -xvf 文件名
(2)安装32位支持库。由于arm是32位的,linux的64位,所以需要下载一个32位的支持库。下载安装命令apt-get install lib32z1。注意不能直接复制粘贴该命令,要纯手打。
(3)添加环境变量(安装arm gcc)。找到压缩后的arm gcc编译器文件夹,打开,bin目录,里面包含arm gcc的所有命令,pwd查看绝对路径,复制;打开环境变量的配置文件,命令vi ~/.bashrc;跳到最后一行添加一个指令export PATH=$PATH:刚刚复制的绝对路径,保存退出就可以了。
2.ftp(类似于网盘下载查看)
1.安装
查看虚拟机是否安装tftp
dpkg -s tftpd-hpa
安装tftp
sudo apt-get install tftpd-hpa tftp-hpa
2.配置文件
vim /etc/default/tftpd-hpa
修改这个文件的共享文件目录路径就可以了
保存退出
重启tftp服务器
service tftpd-hpa restart
3.进入tftp
tftp 目标ip地址(localhost)代表本机ip地址
命令ifconfig可以查看本机的ip作为测试
进入tftp之后可以进行上传下载等操作
put 文件名(当前路径下):上传文件
get 文件名(当前路径下):下载文件
quit: 退出
3、sfn(类似于网盘在线查看)
1.安装nfs
查看虚拟机是否安装nfs
dpkg -s nfs-kernel-server
安装nfs
sudo apt-get install nfs-kernel-server
2.配置文件
vim /etc/exports
修改工作路径,以及可共享的主机名、权限
/home/xwq/lxn/sfn/sfn1 *(rw,sync,no_root_squash,no_subtree_check)
查看nfs工作路径
showmount -e localhost
重启nfs
service nfs-kernel-server restart
3.挂载
sudo mount -t nfs localhost:/home/xwq/lxn/sfn/sfn1 /mnt/hgfs/AAA
本地ip nfs工作路径 挂载路径
取消挂载
sudo umount -fl /mnt/hgfs/AAA
4、安装串口工具
说白了就是虚拟机和开发板通过串口完成交互的工具。
(1)下载工具;
(2)开发板串口连接电脑,打开电脑的设备管理器可以查看连接的端口,现在是COM4端口。
串口工具的使用:
开机启动开发板时,会延时几秒,在此期间如果你没有按下键盘,那么开发板自动进入安装好的操作系统;那么如果你在此期间按下按钮呢,就会进入u-boot,里面也是一个行命令界面,你需要会使用u-booot命令;
二、u-boot启动加载
1.简介
Bootloader的一种。如你重装系统,那么开始进入的一个重装系统的界面就是Bootloader,但是在windows管这玩意叫做bios,那么linux的Bootloader就叫做u-booot;
u-boot由汇编和C语言编写,为了加载操作系统。
2.u-boot命令
help:查看u-boot命令帮助文档,可以查看u-boot有哪些命令,并查看命令有哪些用;
help 命令:查看某条命令的具体使用方法;
printenv:打印环境变量
setenv (环境变量名)( 变量值):设置某个环境变量
saveenv:保持设置,设置如果不保存只会把设置的放在内存中,保持之后放到flash中;
laody 内存地址:下载文件到指定内存地址
laodb 内存地址:同上,只是用的传输协议不一样
tftp 内存地址 文件名:通过tftp下载文件到指定内存地址
ping IP地址:测试连接某个ip地址
go 内存地址:执行内存地址下的文件
3.环境变量
baudrate=115200 //波特率
bootargs=root=/dev/ram0 rw console=ttySAC2,115200 init=/linuxrc
bootcmd=movi read kernel 41000000;movi read dtb 42000000;movi read rootfs 43000000 30140d;bootm 41000000 43000000 42000000 //自启动环境变量
bootdelay=3 //开机延时秒
ethact=dm9000 //
ethaddr=11:22:33:44:55:66 //物理网卡地址
fileaddr=41000000 //文件内存起始地址
filesize=30140D //文件内存大小
gatewayip=192.168.31.1 //网关地址
ipaddr=192.168.2.195 //ip地址,本机地址一个没人用的ip地址就可以了
netmask=255.255.255.0 //掩码地址
serverip=192.168.2.184 //服务器地址,也就是虚拟机的ip地址
stderr=serial //打印终端
stdin=serial
stdout=serial
那么我们需要那些配置呢???
(1)set serverip=192.168.2.184 //服务器地址,也就是虚拟机的ip地址
(2)set ipaddr=192.168.2.195 //ip地址,本机地址一个没人用的ip地址就可以了
(3)set bootargs root=/dev/nfs nfsroot=192.168.3.196:/home/lsf/source/rootfs rw console=ttySAC2,115200 init=linuxrc ip=192.168.4.101
// 虚拟机服务器地址 nfs目录下的rootfs文件路径 ip地址
(4)set bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000
自启动命令: 用tftp协议 在内存41000000处下载uImage文件夹(编译之后的内核源码),tftp协议在内存42000000处下载文件夹exynos4412-fs4412.dtb(设备树文件),执行
4.u-boot移植
先去找厂家要u-boot源码,解压到linux下面
我们先来看看它里面都有那些文件
api COPYING examples MAKEALL README tools
arch CREDITS fs Makefile rules.mk u-boot
board disk helper.mk mkconfig snapshot.commit u-boot.bin
boards.cfg doc include nand_spl spl u-boot.lds
common drivers lib net System.map u-boot.map
config.mk dts MAINTAINERS post test u-boot.srec
告诉大家一个好消息,就是他这里面的文件大部分都是没有用的,有用的就只有:
cpu的代码 arch/arm/armv7 不需要动
板子的代码 board/samsung/origen 要改
配置文件 include/configs/origen.h 要改
所谓修改其实就是重命名而已,将别人的变成我们的:
(1)修改origen目录
重命名board/samsung/origen,,这个目录变成我们的fs4412,可以用cp、mv;
进入修改好的目录将里面的origen.c,变成fs4412.c,保持退出;
在顶层目录下面修改Makefile文件,将origen全部替换成fs4412,底行命令:%s/origen/fs4412/g,保持退出;
(2)重命名include/configs/origen.h,,将这个文件变成我们的fs4412.h,,可以cp、mv
(3)修改配置文件
vi boards.cfg
添加一行
fs4412 arm armv7 fs4412 samsung exynos
(4)配置
make fs4412_config ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
(5)编译
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
三、os操作系统
1.配置内核
配置内核其实就是在内核里面添加或者删除一些模块,这依赖于配置文件,他里面有很多模块选项你可以添加删除操作。
找到配置文件,arch/arm/configs/exynos_defconfig,弄到顶层目录下面,注意:他是一个隐藏文件
可以用vi、vim查看文件的内容,里面都是一些宏。
那么,如何配置呢,有两种方法:
(1)直接用vi或vim像敲代码一样的配置,这样难度大,门槛高;
(2)用图形化配置工具辅助配置,简单易上手。
我们采用图形化配置,首先你需要安装一个图形化配置工具
sudo apt-get install libncurses5-dev
进入配置工具
make menuconfig ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
配置结束后保持退出。
2.编译内核
普通编译
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
生成两个文件
Image 系统镜像镜像 5.5M左右
zImage 压缩后的系统镜像 3M左右
前者文件内存有点大了,后者内存虽然小,但每次都要解压,有没有既内存小,又能够自动解压的文件镜像
make uImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
结果生成一个uImage,
四、文件系统
二、解压相关文件
(1)将uImage拖到虚拟机的tftp共享文件路径下面
(2)将exynos4412-fs4412.dtb拖到虚拟机tftp共享文件路径下面
(3)将rootfs.tar.xz托到虚拟机,你设置的nfs文件目录下,然后解压
tar Jxf xxxx.tar.xz 解压xz后缀的文件
需要把所有的文件权限全部设置为777
命令:chmod 777 xxxx
四、传输文件
(1)首先我们要准备有网络的网线,然后连接到开发板的网口;
(2)虚拟机保持打开,开发板连接我们的电脑(串口连接);
(3)启动开发板之后,开发板自动进入我们的u-boot,下载共享目录下的文件,等待就可以了;
(4)如果自动下载不知道什么地方错了,我们也可以选择手动下载文件,因为他的执行步骤的单步运行的;
输入以下指令:
tftp 41000000 uImage
tftp 42000000 exynos4412-fs4412.dtb
bootm 41000000 - 42000000
总结
开发板下的u-boot是支持tftp和nfs这两种文件传输方式,由于二者内存大小极小,使用简单便捷,所以很适用于嵌入式。我们就可以用这两个工具从linux系统中,通过网线,将文件传输到开发板上面。