完全Ubuntu16.04平台下编写下载嵌入式S3C2440程序


原本照着韦东山视频里学的方式是Windows中编写程序,然后文件传输至Linux服务器(虚拟机)中编译,再传回来,再在Windows下用DNW下载至板子上,非常繁琐。最近装了Ubuntu双系统,便尝试一下完全在Ubuntu平台上编写下载S3C2440程序。参考了韦东山JZ2440教程,相关文件大家自行下载吧。

1.代码编写

就拿最简单的C语言LED灯尝试把
直接使用Ubuntu自带gedit编写三个文件(偷懒,直接抄了例程)
crt0.S:

.text
.global _start
_start:
            ldr     r0, =0x53000000     @ WATCHDOG寄存器地址
            mov     r1, #0x0                     
            str     r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启
            ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
halt_loop:
            b       halt_loop

led_on_c.c:

#define GPFCON      (*(volatile unsigned long *)0x56000050)
#define GPFDAT      (*(volatile unsigned long *)0x56000054)
int main()
{
    GPFCON = 0x00000100;    // 设置GPF4为输出口, 位[9:8]=0b01
    GPFDAT = 0x00000000;    // GPF4输出0,LED1点亮
    return 0;
}

Makefile:

led_on_c.bin : crt0.S  led_on_c.c
	arm-linux-gcc -g -c -o crt0.o crt0.S
	arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
	arm-linux-ld -Ttext 0x0000000 -g  crt0.o led_on_c.o -o led_on_c_elf
	arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
	arm-linux-objdump -D -m arm  led_on_c_elf > led_on_c.dis
clean:
	rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o

2.安装交叉编译工具链(仅第一次需要)

新装的Ubuntu系统还没装过交叉编译工具链,照韦东山教程再来一遍。
在这里插入图片描述
解压工具链:

$ cd /home/houjing/work/tools
//地址与教程中不一样
$ tar xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

环境变量PATH中增加路径:

$ export PATH=$PATH:/home/houjing/work/tools/gcc-3.4.5-glibc-2.3.6/bin
//地址与教程中不一样

教程中修改了environment文件,看网上很多人修改了之后无法登录,想想还是算了,老老实实每次引用路径吧。
于是在Makefile文件前加上export PATH那行
得到:

export PATH=$PATH:/home/houjing/work/tools/gcc-3.4.5-glibc-2.3.6/bin
led_on_c.bin : crt0.S  led_on_c.c
	arm-linux-gcc -g -c -o crt0.o crt0.S
	arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
	arm-linux-ld -Ttext 0x0000000 -g  crt0.o led_on_c.o -o led_on_c_elf
	arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
	arm-linux-objdump -D -m arm  led_on_c_elf > led_on_c.dis
clean:
	rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o

安装ncurses

$ cd /home/houjing/work/tools
$ tar xzf ncurses.tar.gz
$ cd ncurses-5.6
$ ./configure --with-shared --prefix=/usr
$ make
$ sudo make install

3.代码编译

在led程序文件夹中打开终端

$ make

在这里插入图片描述

4.串口通讯助手Putty安装(仅第一次需要)

$ sudo apt-get install putty
//等待安装
//等待安装

可能存在串口权限问题,参考:https://blog.csdn.net/Rafe_ma/article/details/77838613

$ sudo adduser 替换为你的用户名 dialout

5.串口传输助手DNW安装(仅第一次需要)

参考韦东山教程
在这里插入图片描述

houjing@houjing-CW65S:~$ lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 2109:0813 VIA Labs, Inc. 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 04f2:b43b Chicony Electronics Co., Ltd 
Bus 003 Device 009: ID 5345:1234 Owon PDS6062T Oscilloscope//这个是开发板
Bus 003 Device 006: ID 046d:c077 Logitech, Inc. M105 Optical Mouse
Bus 003 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 003 Device 004: ID 413c:2113 Dell Computer Corp. 
Bus 003 Device 002: ID 2109:2813 VIA Labs, Inc. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

bin目录下无法粘贴,所以在dnw文件夹中打开终端

$ sudo cp dnw /usr/bin/dnw
$ sudo chmod +x /usr/bin/dnw

6.代码下载

$ sudo putty//可直接打开putty

在这里插入图片描述
先选择“Serial”,再将Serial line改为/dev/ttyUSB0,Speed改为115200,单击Open
在这里插入图片描述
应该可以通信啦
但是发现Putty偶尔显示异常,偶尔又是好的,原因暂时没搞清。
不过只要熟悉流程,按时空格、D,下载还是能下载的。

$ sudo dnw 替换为对应文件名.bin

在这里插入图片描述换了LED闪烁的程序,成功~

猜你喜欢

转载自blog.csdn.net/weixin_43994482/article/details/85040884