在网上看见的一篇文章。觉得不错就收藏了。具体来源找不到了,还请原文作者见谅。
给新买板子的同志们一个参考:
板子:YC2410
主机:Fedora core 6(其它发行版linux都一样)
1. 打开包装盒,核对清单。
2. 拆开串口线把板子上串口0与主机的串口相连。
3. 拆开网线连接板子与主机。
4. shell命令下运行:minicom
FC6下第一次运行minicom需要运行minicom -s配置串口,(ttyS0, 115200,NO,NO)
5. 开发板上电,我的板子出现的问题是系统在不停的配置dhcp网址,因为板子出厂时开启了dhcp功能。
修改方法:先用直连线接入HUB,板子会自动获取IP地址,接下来修改/etc/init.d/rsC,把里面的dhcp
功能给禁了(注释掉就行),再设定板子固定IP地址(按原来注释内容修改就行).
6. 进入shell命令状态。
建立Linux下的开发环境:
建立编译环境
1. 把光盘里的关于linux开发的目录拷到本地目录下。
2. 安装交叉编译器
tar jxvf cross-2.95.3.tar.bz2 -C /
(不要按照文档里写的先建立/usr/local/arm目录,会自动解压此目录下,建议直接安装3.4.1编译器)
修改/etc/profile,就是把arm-linux-gcc加入PATH中,这个可参考文档。
3. 解压内核源码。目录任意。
在开发板运行主机上的程序:
个人感觉更佳的方法就是在主机建立nfs服务。
1。在主机开启nfs服务
运行/etc/init.d/nfs restart
2. 修改/etc/exports文件,设定你主机上的工作目录,以后在板子上就直接通过nfs mount到这个目录下,相当 于板子上的一个目录:
如: /home/kevin *(rw,no_root_squash,sync) 前面是目录,后面是权限。
3. 可以先在本机上试一试nfs服务是否起来
命令:mount 192.168.0.15:/home/kevin /mnt 192.168.0.15是主机IP地址
如果/mnt下有/home/kevin下的内容证明nfs成功。
4. 在开板上也输入命令:
mount 192.168.0.15:/home/kevin /mnt 192.168.0.15是主机IP地址
然后板子上的/mnt目录就和主机的/home/kevin目录同步了。
5,在主机/home/kevin目录下开发编译程序,在板子上调试。
6. 先试一个光盘自带的应用程序,测按键buttons
把buttons目录拷到/home/kevin目录下。
在板子上/mnt目录下也能看到此目录了。
在板子上直接运行./buttons,程序开始运行,测试板子上的按键。
7. 调试运行内核模块
源码还是论坛以前给的那个hello_world,我在直接加载这个模块时,出现问题,说是内核版本号不一样,又自己编译了一下,出现arm-linux-gcc的版本号又不一样了(我刚开始用的是2.9)。换成3.4再编译后就OK了。
其实编写内核时的Makefile比较重要,论坛上的那个例程的makefile也太丑了(小声地说:扬创的文档编写能力确定不咋地!)。
下面我给出我的Makefile,这也是我从一个别的模块里修改而来的。
# Makefile
# Please modify here or set environments.
# KSOURCE should be pointed to the build directory of your kernel.
#
DEBUG ?= n
KSOURCE ?= /home/arm2410/linux_s3c2410 #此处修改为你自己的内核所在目录
%.x:%.c
arm-linux-gcc -o $@ $<
KBUILD_VERBOSE:=1
obj-m := hello.o
default:
make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} SUBDIRS=`pwd` modules
.PHONY: cscope
cscope:
cscope -b -k -R
.PHONY: clean
clean:
make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} SUBDIRS=`pwd` clean
rm -f *.x *~
把这个Makefile,hello.c两个文件放在一个目录下,直接运行make,就可以产生模块文件了。
这之前都是在主机上编译的。
在板子运行:insmod hello.ko, 成功!显示信息
lsmod 显示模块名
rmmod 删除模块,显示信息.
好了,整个嵌入式的开发平台就建立起来了,下面就是各位的更高阶段的嵌入式之旅啦!
PS:我也是菜鸟一个,板子还是昨天刚拿到的。希望和大家一起学习,共同进步。
附:hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
阅读(1687) | 评论(0) | 转发(0) |