在Fedora 12下编译和调试RT-Thraed
<!-- more-->
1.安装编译工具
yum install scons
yum install python
安装工具arm-2010q1-202-arm-none-linux-gnueabi.bin,我是安装在/home/lixianjing/CodeSourcery目录下的,后面会引用这个路径。
2.下载RT-Thread
[lixianjing@vm os]$ wget http://rt-thread.googlecode.com/files/rt-thread-0.4.0%20beta1.zip
[lixianjing@vm os]$ unzip rt-thread-0.4.0/ beta1.zip
[lixianjing@vm os]$ cd rt-thread-0.4.0/ beta1/bsp/mini2440/
3.修改rtconfig.h
//#define RT_USING_NEWLIB
//#define RT_USING_PTHREADS
使用NEWLIB和PTHREADS,在我这里有些问题,编译时会说头文件有冲突。加上-nostdinc选项之后又说有些头文件找不到了。估计newlib还不太成熟,所以我暂时没有用NEWLIB。
4.修改rtconfig.py
#EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
EXEC_PATH = '/home/lixianjing/CodeSourcery/Sourcery_G++_Lite/bin'
#PREFIX = 'arm-none-eabi-'
PREFIX = 'arm-none-linux-gnueabi-'
LFLAGS += ' -nostdlib'
CFLAGS += ' -nostdinc -nostdlib'
如果不加nostd,就会出现头文件冲突的情况,通常编译内核都是要加这个选项的,但是不清楚为什么在Windows下没有问题。
5.修改SConstruct
# build program
env.Program(TARGET, objs, LIBS=['libgcc.a'], LIBPATH='/home/lixianjing/CodeSourcery/Sourcery_G++_Lite/lib/gcc/arm-none-linux-gnueabi/4.4.1/armv4t/')
因为arm没有除法指令,所以除法是用函数实现的,这些函数在libgcc.a里。因为前面加了nostdlib选项,所以这里要链接一下libgcc.a。
6.加上一个raise函数
raise.c:
void raise(void)
{
return;
}
这个函数可能是libgcc.a里某处引了它,应该相当于abort之类的功能吧,这里实现一个空函数即可。
7.修改SConscript
src_bsp = ['application.c', 'startup.c', 'board.c', 'raise.c']
这里只是把raise.c加入编译。
8.编译RT-Thread
[lixianjing@vm mini2440]$ scons
如果出现下列信息,那就是编译成功了:
arm-none-linux-gnueabi-objcopy -O binary rtthread-mini2440.axf rtthread.bin
arm-none-linux-gnueabi-size rtthread-mini2440.axf
text data bss dec hex filename
363064 1516 14740 379320 5c9b8 rtthread-mini2440.axf
scons: done building targets.
注意:以上工作都是在bsp/mini2440/目录下完成的。
9.编译qemu
直接用yum安装qemu是不行的,因为里面没有mini2440的配置,要下载qemu for mini2440的源代码才行:
[lixianjing@vm os]$ git clone git://repo.or.cz/qemu/mini2440.git
[lixianjing@vm os]$ cd mini2440
10.修改hw/mini2440.c
static void mini2440_reset(void *opaque)
{
struct mini2440_board_s *s = (struct mini2440_board_s *) opaque;
uint32_t image_size;
if (s->kernel) {
image_size = load_image(s->kernel, qemu_get_ram_ptr(0));
if (image_size > 0) {
if (image_size & (512 -1))
image_size = (image_size + 512) & ~(512-1); s->cpu->env->regs[15] = S3C_RAM_BASE ;
mini2440_printf("loaded kernel %s at %p/n", s->kernel, s->cpu->env->regs[15]);
}
return;
}
...
}
开始我直接编译了qemu,运行时总出现无效地址问题。后来发现是qemu是按u-boot加载的RT-Thread,RT-Thread加载的地址与u-boot是不同的,所以根本没有执行到RT-Thread的代码。
11.编译qemu
[lixianjing@vm mini2440]$ ./configure --target-list=arm-softmmu --disable-linux-user;make
[lixianjing@vm mini2440]$ su
[root@vm mini2440]# make install
12.调试运行RT-Thread
开两个终端,都进入bsp/mini2440目录。
终端1:
[lixianjing@vm mini2440]$ qemu-system-arm -S -s -M mini2440 -kernel rtthread.bin -serial stdio
S3C: CLK=240 HCLK=240 PCLK=240 UCLK=57
QEMU: ee24c08_init
DM9000: INIT QEMU MAC : 52:54:00:12:34:56
QEMU mini2440_reset: loaded kernel rtthread.bin at 0x30000000
加 -S -s 选项表示qemu等待调试器连接。
终端2:
[lixianjing@vm mini2440]$ arm-none-linux-gnueabi-gdb rtthread-mini2440.axf
(gdb) target remote :1234
Remote debugging using :1234
_start () at /home/lixianjing/lab/os/rt-thread-0.4.0 beta1/libcpu/arm/s3c24x0/start_gcc.S:91
91 b reset
(gdb) b rt_init_thread_entry
Breakpoint 1 at 0x30000350: file application.c, line 64.
(gdb) c
Continuing.
Breakpoint 1, rt_init_thread_entry (parameter=0x0) at application.c:64
64 dfs_init();
(gdb)
1234是qemu等待调试器的缺省端口号。
然后就可以用gdb研究RT-Thread了。
这里说明一下,我的工作目录是/home/lixianjing/lab/os,针对mini2440定制的qemu在mini2440下,rt-thread源代码在rt-thread-0.4.0 beta1下。
分享到:
相关推荐
Eclipse+Jlink+Fedora实现mini6410单步调试u-boot
后两个种子是在官网找到的,分别是:Fedora-14-i386-DVD.iso和Fedora-14-x86_64-DVD.iso。我是在迅雷上测试下载的,把地址复制下来一般迅雷会自动弹出下载框,不行就打开迅雷点新建,就能下载了,不能下载,大家不要...
Fedora_14_编译_OpenWrt-BackFire
在Fedora下交叉编译出得可执行exe文件。其中包括remote-viewer.exe,spicy.exe,spicy-screenshot.exe,spicy-stats.exe,virt-viewer.exe,windows-cmdline-wrapper.exe。
fedora14中安装arm-linux-gcc交叉编译器.pdf
虚拟机:VMWare ...虚拟系统:Fedora17 交叉编译环境:arm-linux-gcc 4.4.3 查阅了很多相关资料,终于安装成功了。这个文档是我总结的,算是对自己学习过程的一个记录,也希望我的这个经验对其他人会有所帮助。
Fedora14下,交叉编译qt-everywhere-opensource-src-4.8.0-tp源码.arm-linux-gcc版本4.3.3
Fedora-Workstation-Live-x86_64-26-1.5.iso 网盘下载链接 确保资源可用
使用库libusb-1.0.9在fedora18下编译,并测试程序,
Fedora-10-Installation-Configration-FAQ1 Fedora-10-Installation-Configration-FAQ2 Fedora-10-Installation-Configration-FAQ3
Fedora-17-i686-Live-Desktop.part12
在Fedora21上安装有道词典youdao-dict on Fedora21.docx
Fedora 是一个开放的、创新的、前瞻性的操作系统和平台,基于 Linux。它允许任何人自由地使用、修改和重发布,无论现在还是将来。
fedora 下能用的dnw2(不用编译,直接使用)
Fedora9.0内核开发包(kernel-devel),在/usr/src下解压即可使用。
解决configure: error: lz4 support requested but liblz4 >= 129 could not be found, export PREFIX=安装目录 &make; &make; install
Fedora内核编译的实现 ...Fedora-10-i386 运行操作系统(内核2.6.27) 下载 Serv-U Ftp服务器(实现Windows与Linux文件共享) 下载 linux-2.6.28.1.tar.gz 源代码(准备用来编译的源代码) 下载
Fedora-10-x86_64-DVD
Fedora 是一个开放的、创新的、前瞻性的操作系统和平台,基于 Linux。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放...
( fedora下安装arm-linux-gcc.docx ) 非常经典,值得下载!