rt smart操作系统在“正点原子-阿尔法”开发板开箱使用

  • Post author:
  • Post category:其他


1、准备

正点原子阿尔法linux开发板,SD卡,网络,USB线。由于正点原子的开发板和ART-PI-smart开发板使用的是一样的MPU,所以可以运行ART-PI-smart的程序。

下载ART-PI-smart软件:



ART-Pi-smart


icon-default.png?t=M0H8
https://gitee.com/rtthread/ART-Pi-smart



,下载后,参考



ART-Pi Smart Docs (gitee.io)


icon-default.png?t=M0H8
https://art-pi.gitee.io/smart-website/docs/#/user_manual/user_manual?id=windows-%e4%b8%8b%ef%bc%8c%e5%bf%ab%e9%80%9f%e4%bd%93%e9%aa%8c-rt-smart



安装好编译工具与相关软件,下面的程序的下载主要采用TFTP下载,所以还需要安装好TFTP工具软件,上面的链接中有下载。

2、编译程序

设置编译环境使用的工具链的全局变量,在ART-Pi-smart目录下右键打开conEmu软件,执行smart-env.bat来设置。

编译操作系统内核:进入了bsp目录下,执行scons,即在imx6ull-artpi-smart下面生成了rtthread.bin文件,此文件加载到imx6ull芯片DDR 0x80001000位置后即可以运行操作系统了。

编译应用程序,进行userapp目录下面,执行scons编译即可,scons -c清除编译目标, –verson为打印编译的详细log。编译后把生成的可执行文件,在ART-Pi-smart\userapps\root目录下在,复制root文件夹到SD卡里面就行了。

zhaoshimin@ZSM E:\rt-thread\ART-Pi-smart\userapps
> scons
scons: Reading SConscript files ...

scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly
File "..\tools\building.py", line 174, in GetCurrentDir
scons: done reading SConscript files.
scons: Building targets ...
CC apps\tftp\packages\netutils-latest\tftp\tftp_client.o
CC apps\tftp\packages\netutils-latest\tftp\tftp_port.o
CC apps\tftp\packages\netutils-latest\tftp\tftp_server.o
CC apps\tftp\packages\netutils-latest\tftp\tftp_xfer.o
CC apps\webclient\packages\webclient-v2.1.2\src\webclient.o
CC apps\webclient\packages\webclient-v2.1.2\src\webclient_file.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_alias.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_asp.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_auth.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_cgi.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_index.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_log.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_ssi.o
CC apps\webserver\packages\webnet-v2.0.2\module\wn_module_upload.o
CC apps\webserver\packages\webnet-v2.0.2\samples\wn_sample.o
CC apps\webserver\packages\webnet-v2.0.2\samples\wn_sample_upload.o
CC apps\webserver\packages\webnet-v2.0.2\src\webnet.o
CC apps\webserver\packages\webnet-v2.0.2\src\wn_mimetype.o
CC apps\webserver\packages\webnet-v2.0.2\src\wn_module.o
CC apps\webserver\packages\webnet-v2.0.2\src\wn_request.o
CC apps\webserver\packages\webnet-v2.0.2\src\wn_session.o
CC apps\webserver\packages\webnet-v2.0.2\src\wn_utils.o
CXX build\cpp1114\cpp1114.o
CC build\gpio\gpio_test.o
CC build\hello\main.o
CC build\i2c\i2c_test.o
CC build\ntp\main.o
CC build\ping\main.o
CC build\pong\main.o
CC build\pwm\pwm_test.o
CC build\sysinfo\main.o
CC build\tftp\main.o
CC build\uart\uart_test.o
CC build\uPnP\upnp_daemon.o
CC build\vi\optparse-v1.0.0\optparse.o
CC build\vi\vi.o
CC build\vi\vi_utils.o
CC build\webclient\main.o
CC build\webserver\main.o
LINK root\bin\cpp1114.elf
LINK root\bin\gpio.elf
LINK root\bin\hello.elf
LINK root\bin\i2c.elf
LINK root\bin\ntp.elf
LINK root\bin\ping.elf
LINK root\bin\pong.elf
LINK root\bin\pwm.elf
LINK root\bin\sysinfo.elf
LINK root\bin\tftp.elf
LINK root\bin\uart.elf
LINK root\bin\uPnP.elf
LINK root\bin\vi.elf
LINK root\bin\webclient.elf
LINK root\bin\webserver.elf
scons: done building targets.

zhaoshimin@ZSM E:\rt-thread\ART-Pi-smart\userapps

3、rt smart操作系统启动

rtthread.bin文件中编译生成的可执行程序,它要加载到DDR内存中才能运行。所以需要使用U-BOOT来启动引导下载。现在阿尔法开发板已经在EMMC中下载好了U-BOOT程序,开发板选择使用EMMC启动,启动后按任意键停止在U-BOOT中。使用网线连接开发板的网口1(此u-boot程序已经修改使用网口1)到电脑的网口,设置电脑的IP地址10.10.26.84。

U-Boot 2016.03 (Feb 02 2022 - 22:58:25 +0800)


CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)

CPU:   Industrial temperature grade (-40C to 105C) at 49C

Reset cause: WDOG

Board: MX6ULL 14x14 EVK

I2C:   ready

DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Display: ATK-LCD-4.3-480x272 (480x272)

Video: 480x272x24

reading alientek.bmp
** Unable to read file alientek.bmp **

Error: no valid bmp image at 88000000

In:    serial

Out:   serial

Err:   serial
switch to partitions #0, OK

mmc1(part 0) is current device

Net:   FEC0

Normal Boot

Hit any key to stop autoboot:  3 2 


=> 

设置U-BOOT中的IP地址,子网掩码,TFTP服务器IP地址。使用setenv命令,最后使用saveenv来保存。

setenv ipaddr 10.10.26.8
setenv ethaddr 00:05:9f:04:d2:35
setenv gatewayip 10.10.26.1
setenv netmask 255.255.255.0

电脑上面安装TFTP软件,选择文件夹到rtthread.bin目录。先后执行tftp 80001000 rtthread.bin下载程序到内存,再使用go 80001000运行程序。

=> tftp 80001000 rtthread.bin
FEC0 Waiting for PHY auto negotiation to complete.... done
Using FEC0 device

TFTP from server 10.10.26.84; our IP address is 10.10.26.8

Filename 'rtthread.bin'.

Load address: 0x80001000

Loading: *T #################################################################

	 ##########

	 205.1 KiB/s

done

Bytes transferred = 1100464 (10cab0 hex)

=> go 80001000

## Starting application at 0x80001000 ...

 \ | /
- RT -     Thread Smart Operating System
 / | \     5.0.0 build Feb  3 2022
 2006 - 2020 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[15] E/drv.enet: emac device init success


[19] I/I2C: I2C bus [i2c3] registered

[23] I/I2C: I2C bus [i2c4] registered

[81] I/SDIO: SD card capacity 3979776 KB.

found part[0], type:FAT32, begin: 0, size: 3.810GB
[135] I/SDIO: emmc card capacity 7634944 KB.

found part[0], type:unkonw, begin: 0, size: 128.0MB
found part[1], type:LINUX, begin: 0, size: 7.150GB
[251] I/touch: rt_touch init success

[254] I/gt911: touch device gt911 init success

[258] I/sal.skt: Socket Abstraction Layer initialize success.

[464] W/app.filesystem: sd card mount to '/mnt' failed!

emmc file system initialization done!
sd0 file system initialization done!
hello rt-smart
msh />[3728] D/drv.enet: enet1 link up



msh />

4、文件系统挂载

这里rt smart操作系统启动后,会执行文件系统挂载操作,对应的代码如下图,它会把emmc设置挂载在根目录下,SD卡挂载到/sd目录下。我的开发板第一次启动发现无法挂载,查了一段时间是目录的问题。emmc中要有sd目录才行,同进要有fat32文件系统分区,emmc中的分区可以使用开发板中提供的linux系统的下载文件,通过usb启动后,使用mfgtools 进行下载即可,下载后会在emmc中形成3个分区,0分区存储uboot,1分区是fat32分区存储设备树和Linux启动映像程序,分区2是Linux的根文件系统ext4文件系统。

第一次启动后,emmc有FAT32分区,所以可以正常挂载的,在命令中执行mkdir sd创建文件夹。如下图,这样再次启动rt smart系统后sd卡就能正常挂载了。由于smart系统程序中对SD卡的插拔处理的不好,系统启动后,拔出sd卡再插上后就可无法查看sd卡中的文件了。

FEC0 Waiting for PHY auto negotiation to complete..... done
Using FEC0 device

TFTP from server 10.10.26.84; our IP address is 10.10.26.8

Filename 'rtthread.bin'.

Load address: 0x80001000

Loading: *T #################################################################

	 ##########

	 205.1 KiB/s

done

Bytes transferred = 1100464 (10cab0 hex)

## Starting application at 0x80001000 ...

 \ | /
- RT -     Thread Smart Operating System
 / | \     5.0.0 build Feb  3 2022
 2006 - 2020 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[15] E/drv.enet: emac device init success


[19] I/I2C: I2C bus [i2c3] registered

[23] I/I2C: I2C bus [i2c4] registered

[81] I/SDIO: SD card capacity 3979776 KB.

found part[0], type:FAT32, begin: 0, size: 3.810GB
[135] I/SDIO: emmc card capacity 7634944 KB.

found part[0], type:unkonw, begin: 0, size: 128.0MB
found part[1], type:LINUX, begin: 0, size: 7.150GB
[251] I/touch: rt_touch init success

[254] I/gt911: touch device gt911 init success

[258] I/sal.skt: Socket Abstraction Layer initialize success.

[464] W/app.filesystem: sd card mount to '/mnt' failed!

emmc file system initialization done!
sd0 file system initialization done!
hello rt-smart
msh />
msh />
msh />ls
Directory /:
zImage              6786272                  
imx6ull-14x14-emmc-4.3-480x272-c.dtb38823                    
imx6ull-14x14-emmc-4.3-800x480-c.dtb38823                    
imx6ull-14x14-emmc-7-800x480-c.dtb38823                    
imx6ull-14x14-emmc-7-1024x600-c.dtb38823                    
imx6ull-14x14-emmc-10.1-1280x800-c.dtb38823                    
imx6ull-14x14-emmc-hdmi.dtb39655                    
imx6ull-14x14-emmc-vga.dtb39563                                      
rtthread.bin        1100464                  
msh />[3383] D/drv.enet: enet1 link up



msh />mkdir sd

msh />ls
Directory /:
zImage              6786272                  
imx6ull-14x14-emmc-4.3-480x272-c.dtb38823                    
imx6ull-14x14-emmc-4.3-800x480-c.dtb38823                    
imx6ull-14x14-emmc-7-800x480-c.dtb38823                    
imx6ull-14x14-emmc-7-1024x600-c.dtb38823                    
imx6ull-14x14-emmc-10.1-1280x800-c.dtb38823                    
imx6ull-14x14-emmc-hdmi.dtb39655                    
imx6ull-14x14-emmc-vga.dtb39563                    
sd                  <DIR>                    
rtthread.bin        1100464                  
msh />[3383] D/drv.enet: enet1 link up
msh /sd>cd ro
msh /sd>cd root
msh /sd/root>cd bin
msh /sd/root>cd bin
msh /sd/root/bin>ls
Directory /sd/root/bin:
busybox.elf         590884                   
gpio.elf            194664                   
i2c.elf             196060                   
rtthread.bin        1100464                  
ntp.elf             234884                   
ping.elf            203628                   
pong.elf            203060                   
pwm.elf             204112                   
sdl_test.elf        1046388                  
uart.elf            203624                   
uhttpd.elf          173400                   
uPnP.elf            223524                   
vi.elf              291040                   
webclient.elf       241720                   
webserver.elf       330372                   
hello.elf           193456                   
tftp_server.o       17844                    
tftp.elf            238008                   
msh /sd/root/bin>

测试中发现的问题:如果使用的SD卡有2个分区,一个分区用于存储uboot.imx,另外一个分区是fat32文件系统, 那么挂载文件系统,SD卡目录下二级目录在查看文件时会显示驱动错误。如下打印信息。

msh />ls
Directory /:
System Volume Information<DIR>                    
webserver.elf       319924                   
gpio.elf            194676                   
hello.elf           193472                   
i2c.elf             196068                   
ntp.elf             225844                   
ping.elf            194736                   
pong.elf            194168                   
pwm.elf             195216                   
uart.elf            194712                   
uPnP.elf            214452                   
vi.elf              282072                   
mould.xml           1289                     
var                 <DIR>                    
webnet              <DIR>                    
msh />cd var
msh />cd var
msh /var>ls
Directory /var:
dist                <DIR>                    
msh /var>ls
Directory /var:
dist                <DIR>                    
msh /var>cd dis
msh /var>cd dist
msh /var/dist>ls
Directory /var/dist:
favicon.ico         5974                     
index.html          3083                     
rtsmart.db          16384                    
[27181] E/SDIO: mmcsd request blocks error

[27185] E/SDIO: -1,0,0, 0x00000002,0x00004001

BAD file: cgi-bin
[27191] E/SDIO: mmcsd request blocks error

[27195] E/SDIO: -1,0,0, 0x00000002,0x00005440

msh /var/dist>cd..
[29281] E/SDIO: mmcsd request blocks error

[29284] E/SDIO: -1,0,0, 0x00000002,0x00004000

[29289] E/SDIO: mmcsd request blocks error

[29292] E/SDIO: -1,0,0, 0x00000002,0x00004000

[29297] E/SDIO: mmcsd request blocks error

[29301] E/SDIO: -1,0,0, 0x00000002,0x00004000

5、运行应用程序

进入到/sd/root/bin目录下,执行gpio.elf &后,即可启动gpio的程序,开发板的红色led灯会闪烁。

msh /sd/root/bin>ls
Directory /sd/root/bin:
busybox.elf         590884                   
gpio.elf            194664                   
i2c.elf             196060                   
rtthread.bin        1100464                  
ntp.elf             234884                   
ping.elf            203628                   
pong.elf            203060                   
pwm.elf             204112                   
sdl_test.elf        1046388                  
uart.elf            203624                   
uhttpd.elf          173400                   
uPnP.elf            223524                   
vi.elf              291040                   
webclient.elf       241720                   
webserver.elf       330372                   
hello.elf           193456                   
tftp_server.o       17844                    
tftp.elf            238008                   
msh /sd/root/bin>gpio.elf &

第一次运行这个gpio.elf程序,你的开发板上面的红色Led灯不会闪烁,原因是开发板上驱动LED的IO与程序不对,应做如下修改,再编译一下生成gpio.elf后,复制到SD卡中启动即可。

6、使用TFTP功能进行应用程序下载

上面应用程序的调试都是通过电脑复制文件到SD卡中来完成的,这个操作起来很繁琐,调试启动rt smart内核使用TFTP来下载,那么应用程序使用TFTP来下载到SD卡或EMMC文件系统中不是更方便。

看了rt smart中支持udb.exe来发送文件到开发板上,查看了系统中没有相关代码支持此udb功能,但是没有找到相关代码,也没有资料,无法实现些功能。决定使用TFTP功能实现,软件包中有TFTP软件模块,可以下载下来试试。

进入到userapp中,复制hello文件夹一份修改成tftp文件夹,进入到tftp文件夹,打开menuconfig下载tftp软件包。

保存,退出后,执行pkgs –update来下载软件包。

下载完成后,执行scons编译,一堆错误,看来TFTP软件包要进行修改,修改过程暂时不表,可以单独另写一篇文章了。经过不断的修改,调试,包括分析TFTP传输的正确的过程数据抓包,终于编译出了tftp.elf。实现了开发板做为客户端从电脑中读取文件和写入文件。

从电脑中下载tftp.elf文件到开发板上去,如下图:

从开发板中把文件rtthread.bin发送到电脑上面,如下图:

有了TFTP功能后,调试应用程序,rt smart内核到开发板上面就方便的多了。

7、设置自动启动rt smart内核

由于开发板使用的EMMC启动,所以需要把rtthread.bin放在emmc中文件系统中,可以使用TFTP功能直接下载rtthread.bin到emmc文件系统中,可以参照第6节介绍。在U-BOOT中设置自动启动命令,rtthread.bin位于emmc中分区1中的文件系统,分区0存储uboot程序,分区2存储linux运行的根文件系统。在uboot命令行中执行setenv bootcmd ‘fatload mmc 1:1 80001000 rtthread.bin; go 80001000’,之后在saveenv保存即可。



版权声明:本文为fhqlongteng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。