Fork Me on GitHub

源码开放学ARM

LASO - Learn ARM with Source Open

首页         目录索引         资料下载         代码下载         联系作者        
下载PDF打印版本

开发环境搭建

准备工作

* 获得参考资料
http://github.com/limingth/ARM-Lessons/tree/master/CortexA8-s5pv210-20120901

* 驱动源码
http://github.com/limingth/ARM-Lessons/tree/master/CortexA8-s5pv210-20120901/tiny210/drivers

* 应用程序
http://github.com/limingth/ARM-Lessons/tree/master/CortexA8-s5pv210-20120901/tiny210/examples

* 相关书籍
- 《linux设备驱动程序》(第3版) http://oss.org.cn/kernel-book/ldd3/index.html
- 《深入分析Linux内核源码》 http://oss.org.cn/kernel-book/index.htm
- 《linux设备驱动开发详解》(第2版)
- 《linux内核设计与实现》(第2版)

* 常用网站 - http://lxr.free-electrons.com/ 在线阅读Linux内核源码,查找内核符号的定义和引用
- http://kernelbook.sourceforge.net/kernel-api.html/ 查找哪些函数可以在模块中使用。

安装交叉编译器

http://github.com/limingth/ARM-Tools/tree/gh-pages/dev

tar zxvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /usr/bin
export PATH=$PATH:your-install-dir
vi ~/.bashrc	-> 修改 PATH 环境变量
which arm-linux-gcc

编写应用程序

/* led.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
	int on;
	int led_no;
	int fd;

	if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
			on < 0 || on > 1 || led_no < 0 || led_no > 3) {
		fprintf(stderr, "Usage: leds led_no 0|1\n");
		exit(1);
	}

	fd = open("/dev/leds0", 0);
	if (fd < 0) {
		fd = open("/dev/leds", 0);
	}
	if (fd < 0) {
		perror("open device leds");
		exit(1);
	}

	ioctl(fd, on, led_no);
	close(fd);

	return 0;
}

编译生成可执行程序

arm-linux-gcc led.c -o led
file led

搭建测试环境

方法1 串口上传

$ rx xxx	(通过xmodem协议)  
xmodem -> 2 spaces -> 1 space + enter

方法2 ftp 上传

配置网络连通

1. 有ip吗?没有则用ifconfig;
	sudo /etc/init.d/networking restart
2. 能ping通自己ip吗?
3. 能ping通网关ip吗?	不能则换网线试试;
4. 能ping通 8.8.8.8 吗?
	不能则sudo route add default gw 192.168.x.x 设置默认网关;
5. 能ping通www.google.com 吗? 
	不能则修改 /etc/resolv.conf 配置dns ,添加nameserver 8.8.8.8;

设置开发板 ip 地址

vi /etc/eth0-setting
IP = 192.168.0.201
Gateway = 192.168.0.1
DNS = 192.168.0.1

设置主机 ip 地址

sudo ifconfig eth0 192.168.0.200

ftp 上传

$ ftp 192.168.0.201
Name: root
Password: root
ftp> binary
ftp> put led
ftp> quit

ftp 脚本
vi ftp.sh

#!/bin/sh
DIR=$1
FILE=$2
ftp -i -in <<!
open 192.168.0.201 21
user username password
cd /home
lcd $DIR         
binary 
put $FILE
bye
!
ls -l $DIR/$FILE

test ftp.sh

chmod 777 ftp.sh
./ftp.sh leds led 
	(leds is dir name, led is file name)
./ftp.sh . led
	(if ftp.sh is in same diretory as led file)

上一节 | 目录索引 | 下一节

blog comments powered by Disqus