Linux系统组成

 1 系统组成

  BootLoader:操作系统引导程序

  内核:

  文件系统:应用程序(用户开发的、网上下载的)

2 安装USB驱动

dongry@d-linux:~$ insmod usb_dnw.ko //安装USB驱动
dongry@d-linux:~$
kernel:GuoQian USB driver for DMW!  //出现这一句说明驱动安装成功

3 查看驱动是否启动

dongry@d-linux:~$lsmod //查看驱动是否启动当中

出现usb dnw说明驱动已经启动

4 Linux系统安装

  首先SEGGER J-FLASH ARM将引导安装程序下载到NOR flash;(引导安装程序通过JTAG下载到开发板的NOR flash),NOR flash通过USB下载线下载到NAND flash。

  注:Nand flash相当硬盘

  系统安装步骤:

  (1)一切连接就绪后(开发板串口与PC机、开发板USB与PC机等)打开软件SecureCRT并连接好出现如下界面

    (2)系统要安装到Nand flash,首先要格式化一下:

    (3)然后安装BootLoader

    把文件下载到内存当中,然后安装服务程序会自动到内存中取这个文件,然后烧录到Nand Flash中

    (4)安装Linux内核

 

   (5)下载文件系统

    下载完成

5 如果找不到arm-linux-gcc安装路径可以修改bash环境路径

dongry@d-linux:~$vim /root/.bashrc   //只是一个例子,安装路径可能不同

dongry@d-linux:~$vim /root/.bashrc  //创建路径
dongry@d-linux:~$source /root/.bashrc  //让路径生效

6 交叉编译链工具实例

 

/***********************************
假如在led文件中有led.lds led.S Makefiles三个文件
**************************************/
dongry@d-linux:~$ cd led

dongry@d-linux:~/led$ ls
led.lds led.S Makefile

dongry@d-linux:~/led$ arm-linux-gcc -g -c led.S    //让led.S生成一个编译文件.o
dongry@d-linux:~/led$ ls
led.lds led.o led.S Makefile

dongry@d-linux:~/led$ arm-linux-ld -Tled.lds -o led.elf led.o  //让led.o生成一个.elf文件
dongry@d-linux:~/led$ ls
led.elf led.lds led.o led.S Makefile

dongry@d-linux:~/led$ arm-linux-objcopy -O binary led.elf led.bin //生成一个.bin的二进制文件
dongry@d-linux:~/led$ ls
led.elf led.lds led.o led.S led.bin Makefile

dongry@d-linux:~/led$ make clean //删除刚才编译的各种文件
dongry@d-linux:~/led$ ls
led.lds led.S Makefile

dongry@d-linux:~/led$ make
led.elf led.lds led.o led.S led.bin Makefile

 7 下载二进制文件到裸机

dongry@d-linux:~$ ./dnw ./led.bin 30008000  //按回车


//出现:
  addr=30008000
  File name:./led.bin
  File size: 252 bytes
  Start Seeding data...
  Seet 100% 262 bytes 10k

 8 链接器脚本

  链接器脚本组成:段、起始链接地址、对齐、变量、代码段首文件

  https://www.cnblogs.com/li-hao/p/4107964.html

8.1 链接器脚本的创建

  (1)创建段信息(包括代码段、数据段、bss段)

SECTION
{
    .text :      //创建代码段
    {
    *(.text)
    }

    .data :    //创建数据段
    {
    *(.data)
    }

    .bss :    //创建bss段
    {
    *(.bss) 
    }
}            

  (2)设置起始链接地址

SECTION
{
    . =0x00000000//设置起始链接地址
    .text :     
    {
    *(.text)
    }

    .data :   
    {
    *(.data)
    }

    .bss :    
    {
    *(.bss) 
    }
}

  (3)对齐

SECTION
{
    . =0x00000000; 
    . =ALION(4);       //四字节对齐
    .text :     
    {
    *(.text)
    }

    . =ALION(4);    //四字节对齐
    .data :    
    {
    *(.data)
    }

    . =ALION(4);    //四字节对齐
    .bss :    
    {
    *(.bss) 
    }
}

  (4)变量

SECTION
{
    . =0x00000000; 
    . =ALION(4);    
    .text :     
    {
    *(.text)
    }

    . =ALION(4);   
    .data :    
    {
    *(.data)
    }

    . =ALION(4);  
    bss_start = . ;  //变量
    .bss :    
    {
    *(.bss) 
    }
    bss_end = . ;    //变量
}

  (5)代码段首文件

SECTION
{
    . =0x00000000; 
    . =ALION(4);    
    .text :     
    {
    start.o(.text)  //代码段首文件
    *(.text)
    }

    . =ALION(4);   
    .data :    
    {
    *(.data)
    }

    . =ALION(4);  
    bss_start = . ; 
    .bss :    
    {
    *(.bss) 
    }
    bss_end = . ;   
}

8.2 运行链接器脚本

arm-linux-ld -Tled.lds start.o main.o -o led.elf //生成.elf文件
arm-linux-objcopy -O binary -S led.elf led.bin //生成二进制文件

arm-linux-objdump -D -S led.elf > dump //反汇编

 

posted @ 2019-02-19 09:36  dongry  阅读(797)  评论(0编辑  收藏  举报