arm嵌入式linux开发环境搭建

ARM 76浏览

一, 准备工作

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<stdio.h>

int main(void)
{
printf(“hello,world!n”);
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起始地址里。