一, 准备工作
1, 在ubuntu里安装并配置好tftp服务、nfs服务,注意重启服务,并用ps –aux查询确认服务运行。
$sudo /etc/init.d/openbsd-inetd restart
$sudo /etc/init.d/xinetd restart
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart
2, 把kernel镜像uImage放到tftp的服务目录比如tftpboot里,递归修改tftpboot的权限
$sudo chmod 777 /tftpboot -R
同样把文件系统filesystem拷贝到/opt/并递归修改权限777。
3,安装win开发板的usb转串口的驱动。
开发板上有PL2303芯片,是一个usb-com芯片,所以需要装驱动。装上驱动后连上开发板,提示找到pl2303串口,在设备管理器里面找到PL2303设备对应的串口号。
二, 设置uboot参数
设置开发板上已经烧好的uboot的参数
uboot烧在nandflash里。打开putty工具,选择serial连接类型,串口对应为设备管理器里面PL2303设备的串口号,波特率改为115200。开发板加电后,自动进进入uboot,出现启动菜单,按空格以便进入菜单选择。按q后进入命令提示符,然后按以下格式设置。
setenv serverip 192.168.7.195 //设置tftp服务端的ip地址, ubuntu中IP用ifconfig可以获取
setenv ipaddr 192.168.7.245 //为开发板设置ip地址
setenv gatewayip 192.168.7.1 //设置网关
setenv ethaddr 08:00:3e:26:0a:45 //设置MAC地址
setenv bootcmd tftp 30800000 uImage ; bootm //设置倒计时后的第一条命令,就是uboot的启动菜单的默认项。
setenv bootargs console=ttySAC0,115200 init=/linuxrc root=/dev/nfs nfsroot=192.168.7.195:/opt/filesystem ip=192.168.7.245:192.168.7.195:192.168.7.1:255.255.255.0:farsight_45:eth0:off //与前面的IP和mac设置一致
saveenv //保存设置uboot传给内核的参数
三, 下载kernel和filesystem
确保网络连接没问题。最好是上位机和目标板的网线通过hub或交换机连在一起。如果上位机和目标板通过网线直连,需采用交叉线(是否可行取决于目标版的uboot是否较好的驱动了目标板的网卡)。如果以上步骤都没有问题,那么目标版的uboot启动后会自动通过tftp服务和nfs服务下载kernel和filesystem。
四, 安装交叉编译环境
笔记:
1,下载arm-linux-4.4.3.tar.bz2,解压到/opt/,交叉工具链可执行文件arm-linux-gcc存放的绝对路径目录为/opt/arm-linux-4.4.3/bin/arm-linux-gcc。
2,修改环境变量PATH的值
$sudo vim ~/.bashrc
在最后一行中添加:
export PATH=$PATH:/opt/arm-linux-4.4.3/bin
保存退出。
五, 交叉编译举例
笔记:
使用交叉工具链编译c代码
比如编写hello.c
$sudo vim ~/hello.c
hello.c内容如下
#include
int main(void)
{
printf(“hello,world!
”);
return 0;
}
编译成arm可执行文件
arm-linux-gcc hello.c -o hello
在/opt/filesystem中新建一个文件夹,专门用来存放交叉编译后的可执行代码
$sudo cd /opt/filesystem
$sudo mkdir bin_arm
将我们之前编译好的hello拷贝到/opt/filesystem/bin_arm中,需要重启重新下载一次才能同步到目标板上?
在目标板的终端中,即putty(串口)中,运行hello。
讨论:
目标板烧入uboot后。
kernel和filesystem没有烧到nandflash里,只是下到sdram里了,每次断电就没了,nandflash里面只有uboot。这样做是为了方便,不用频繁烧写nandflash。
目标版把上位机的filesystem当成自己的根目录。
setenv bootcmd tftp 30800000 uImage ; bootm //设置倒计时后的第一条命令
倒计时的第一条命令bootm是把kernel下载到sdram的30800000起始地址里。