zoukankan      html  css  js  c++  java
  • 在Fedora 12下编译和调试RTThread

    在Fedora 12下编译和调试RT-Thraed

    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下。

  • 相关阅读:
    ECNU 3532 热河路
    ECNU 3531 定西
    前端-如何用gulp快速搭建项目(sass预编译,代码压缩,css前缀,浏览器自动刷新,雪碧图合成)
    CTF—攻防练习之Capture the Flag
    CTF—攻防练习之HTTP—PUT上传漏洞
    CTF—攻防练习之HTTP—SQl注入(get)
    CTF—攻防练习之FTP服务后门
    CTF—攻防练习之SMB私钥泄露
    CTF—攻防练习之ssh私钥泄露
    CTF—WEB—sql注入之无过滤有回显最简单注入
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167384.html
Copyright © 2011-2022 走看看