6410 运行裸机程序

发布时间:2024-09-27  

关于ok6410的裸机开发资料,大多都是windows下的,使用RVDS编写裸机程序,并编译烧录到开发板上运行,但是我整了很久也没在windows10上将环境装好,又懒得装一个xp的虚拟机,所以就摸索在Linux下进行裸机程序的开发。具体内容分为以下几个部分:
一.前期准备
二.裸机程序的编写(驱动LED
三.裸机程序编译链接
四.裸机程序的烧录


一.前期准备
1.交叉编译工具链
交叉编译工具链用来编译、链接裸机程序,生成开发板可执行的二进制文件,只需要将ok6410光盘中的交叉编译工具解压到Linux下,并添加环境变量指明路径即可,如下图:

2.tftp服务器
tftp服务器用来将二进制文件传送到开发板上
1.安装xinetd:
zoro@ubuntu:~$ sudo apt-get install xinetd
2.安装tftp客户端和服务器
zoro@ubuntu:~$ sudo apt-get install tftp tftpd
3.建立配置文件:
建立/etc/xinetd.h/tftp 并写入如下内容,其中var/tftpboot/是服务器的目录,需要将其权限设为777


3.SD卡
由于之后裸机程序需要通过uboot上的tftp烧录到开发板中,所以需要制作SD卡将uboot烧录到NandFlash

二、裸机程序的编写
之前的准备工作做好之后,就可以编写裸机程序了,按照国际惯例先驱动LED(比较简单……),首先看ok6410的原理图


由原理图可知,4个LED对应着芯片的GPM0~GPM3,接下来看芯片手册


由芯片手册可知,GPM0~GPM3的配置是GPMCON的0~15位,分别将其设置为0001,即输出模式,然后给GPMDAT寄存器赋值即可确定输出高电平或者低电平,由原理图可知,在ok6410开发板输出低电平,LED发光。知道这些即可编写裸机程序:
 
 1 #define rGPMCON          (*(volatile unsigned *)(0x7F008820))
  2 #define rGPMDAT          (*(volatile unsigned *)(0x7F008824))
  3 #define rGPMPUD          (*(volatile unsigned *)(0x7F008828))
  4 
  5 
  6 void msDelay(int time)
  7 {
  8     volatile unsigned int i,j;
  9     for(i = 0; i < 2000000; i++)
 10     for(j=0; j

 


到这里裸机程序已经写完了,接下来需要做的就是编译了。

三、 裸机程序编译链接
说白了,使用RVDS只是把编译链接的过程集合到一块了,现在我们需要自己做这些工作,通过Makefile组织文件:
1 ll: led.bin
2
3 led.bin: start.o led.o
4 arm-linux-ld -Ttext 0 -o led.elf start.o led.o
5 arm-linux-objcopy -O binary led.elf led.bin
6 arm-linux-objdump -D led.elf > led.dis
7
8 start.o : start.s
9 arm-linux-gcc -g -o start.o start.s -c
10
11 led.o : led.c
12 arm-linux-gcc -g -o led.o led.c -c
13
14 clean:
15 rm *.o led.elf led.bin led.dis

arm-linux-gcc -g 为了调试 -o 控制输出文件 -c 只编译不链接
arm-linux-ld 链接器
arm-linux-objcopy 输出可执行二进制文件
arm-linux-objdump 将led.elf反汇编到led.dis中

然后执行make命令,就会生成二进制文件 len.bin


四.裸机程序的烧录
进行到这里,只需要将可执行文件烧录到开发板执行就ok了

1.将led.bin文件复制到tftp服务器的目录下(和我的配置的一样的话,即/var/tftpboot目录)

2.向开发板烧录uboot,然后切换到nandflash启动,出现输出信息是按空格,出现如下画面就成功了


然后选择6,进入uboot,给开发板连接网线,确保主机和开发板处于同一局域网,关闭主机的防火墙,然后配置ip

由上向下依次是 开发板ip, 主机ip, 网关, 最后保存

3.将可执行文件下载到DRAM:
tftp 【地址】【文件名】

注意这里的地址必须在0x50000000~0x6FFFFFFF范围内,因为其他内存地址不是DRAM


此时使用go命令, go 【地址】,即可运行你的裸机程序了,可以看到led被点亮了

 


4.到这里可以说整个流程都走完了,但是裸机程序掉电以后就没了,如果想让程序掉电以后还在开发
板上,可以将裸机程序写到nandflash,具体做法如下:

nand erase 【偏移量】【擦除长度】
擦除一块nand,我这里从0x30000000开始 擦除了1M
nand write 【内存地址】【偏移量】【写长度】
将内存里的数据写到nand,这里将0x60000000的裸机程序写到0x30000000处
然后重启以后,再将这片nand内容读入内存,使用go命令运行读到文件的地址。


这里需要注意的是,如果nand擦除的地址太低的话,有可能覆盖uboot,导致uboot不能正常启动,当然写入的地址如果为0的话,
开发板启动以后会直接执行你写的裸机程序,不执行uboot了。

到这里,你已经可以使用linux开发OK6410的裸机程序了,赶快燥起来,把其他外设也都驱动起来吧!


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>