mirror of
https://github.com/apache/nuttx.git
synced 2026-08-01 20:28:58 +00:00
Support NUTTX_ROMFS_PASSWD_PASSWORD via update_romfs_password.sh for configs that enable ROMFS passwd without a defconfig password (sim/login CI). Enable RANDOMIZE_KEYS in sim/login defconfig. Update mkpasswd.c header, platform docs, and the mkpasswd_autogen guide. Signed-off-by: Abhishek Mishra <mishra.abhishek2808@gmail.com>
574 lines
14 KiB
ReStructuredText
574 lines
14 KiB
ReStructuredText
============
|
||
RX65N GRROSE
|
||
============
|
||
|
||
.. tags:: arch:renesas
|
||
|
||
This documentation discusses the port of NuttX to “GR-ROSE” board produced by
|
||
Gadget Renesas. This board features the RX65N (R5F565NEHDFP 100pin QFP).
|
||
|
||
Board Features
|
||
==============
|
||
|
||
- Micro controller - RX65N (R5F565NEHDFP 100pin QFP) RXv2 core [34 CoreMark/mA]
|
||
- ROM/RAM - 2MB/640KB
|
||
- Operating Frequency - 120MHz(12MHz 10 Multiplication)
|
||
- RTC Clock - 32.768kHz
|
||
- Sensors - Temperature(inside MCU)
|
||
- ROS I/F - Ethernet, USB(rosserial)
|
||
- Serial Servo I/F - TTL x 4, RS-485 x 1
|
||
- Analog I/F - ADC(12bit) x 6, DAC x 1
|
||
- Wireless - IEEE 802.11b/g/n
|
||
- PMOD I/F - 1 (I2C, SPI, UART)
|
||
- External power supply - USB VBUS or 4.5V~18V
|
||
- Supply to external - 3.3V, 5V
|
||
|
||
See the RX65N GRROSE website for further information about this board:
|
||
http://gadget.renesas.com/en/product/rose.html
|
||
|
||
Serial Console
|
||
==============
|
||
|
||
RX65N GRROSE supports 12 serial ports (SCI0 - SCI12), however only 5 ports can be tested(SCI0, SCI1, SCI2,
|
||
SCI5 & SCI6).
|
||
|
||
Please find the pin configurations for SCI0, SCI1, SCI2, SCI5 & SCI6
|
||
|
||
SCI0 Pin Configuration:
|
||
|
||
=== ========
|
||
Pin Function
|
||
=== ========
|
||
P21 RXD0
|
||
P20 TXD0
|
||
=== ========
|
||
|
||
SCI1 Pin Configuration:
|
||
|
||
=== ========
|
||
Pin Function
|
||
=== ========
|
||
P30 RXD1
|
||
P26 TXD1
|
||
=== ========
|
||
|
||
SCI2 Pin Configuration:
|
||
|
||
=== ========
|
||
Pin Function
|
||
=== ========
|
||
P12 RXD2
|
||
P13 TXD2
|
||
=== ========
|
||
|
||
SCI3 Pin Configuration (connected to WiFi module):
|
||
|
||
=== ========
|
||
Pin Function
|
||
=== ========
|
||
P25 RXD3
|
||
P23 TXD3
|
||
=== ========
|
||
|
||
SCI5 Pin Configuration:
|
||
|
||
=== ========
|
||
Pin Function
|
||
=== ========
|
||
PC2 RXD5
|
||
PC3 TXD5
|
||
=== ========
|
||
|
||
SCI6 Pin Configuration:
|
||
|
||
=== ========
|
||
Pin Function
|
||
=== ========
|
||
P33 RXD6
|
||
P32 TXD6
|
||
=== ========
|
||
|
||
SCI8 Pin Configuration (Half duplication mode with RS485 driver):
|
||
|
||
=== ==========================
|
||
Pin Function
|
||
=== ==========================
|
||
PC6 RXD8
|
||
PC7 TXD8
|
||
PC5 Direction (L=TX, H=RX)
|
||
=== ==========================
|
||
|
||
Serial Connection Configuration
|
||
-------------------------------
|
||
|
||
1. GRROSE board needs to be connected to PC terminal, using USB to Serial Chip.
|
||
2. Connect TX of USB to serial chip to RX of SCIX(0,1,2,5,6)
|
||
3. Connect RX of USB to serial chip to TX of SCIX(0,1,2,5,6)
|
||
4. Connect GND to GND pin.
|
||
5. Configure Teraterm to 115200 baud.
|
||
|
||
LEDs
|
||
====
|
||
|
||
The RX65N GRROSE board has 2 LED's, 1 Power LED(LED3) and 2 User LED's(LED1,
|
||
LED2),which are enabled through software.
|
||
|
||
If enabled the LED is simply turned on when the board boots successfully, and is
|
||
blinking on panic / assertion failed.
|
||
|
||
Networking
|
||
==========
|
||
|
||
Ethernet Connections
|
||
--------------------
|
||
|
||
========== ============
|
||
Pin Function
|
||
========== ============
|
||
PA4 ET0_MDC
|
||
PA3 ET0_MDIO
|
||
PB2 REF50CK0
|
||
PB7 RMII0_CRS_DV
|
||
PB1 RMII0_RXD0
|
||
PB0 RMII0_RXD1
|
||
PB3 RMII0_RX_ER
|
||
PB5 RMII0_ETXD0
|
||
PB6 RMII0_ETXD1
|
||
PB4 RMII0_TXD_EN
|
||
PA5 ET0_LINKSTA
|
||
PA6_ET_RST ETHER reset
|
||
========== ============
|
||
|
||
NuttX Configurations
|
||
====================
|
||
|
||
The following configurations need to be enabled for network.
|
||
|
||
* ``CONFIG_RX65N_EMAC=y``: Enable the EMAC Peripheral for RX65N
|
||
* ``CONFIG_RX65N_EMAC0=y``: Enable the EMAC Peripheral for RX65N
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR=30``: Address of PHY status register on LAN8720A
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR_100FD=0x18``: Needed for LAN8720A
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR_100HD=0x08``
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR_10FD=0x14``
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR_10HD=0x04``
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR_ALTCONFIG=y``
|
||
* ``CONFIG_RX65N_EMAC0_PHYSR_ALTMODE=0x1c``
|
||
* ``CONFIG_RX65N_EMAC0_RMII=y``
|
||
* ``CONFIG_RX65N_EMAC0_PHYADDR=0``: LAN8720A PHY is at address 1
|
||
|
||
* ``CONFIG_SCHED_WORKQUEUE=y``: Work queue support is needed
|
||
* ``CONFIG_SCHED_HPWORK=y``: High Priority Work queue support
|
||
* ``CONFIG_SCHED_LPWORK=y``: Low Priority Work queue support
|
||
|
||
Using the network with NSH
|
||
--------------------------
|
||
|
||
The IP address is configured using DHCP, using the below mentioned configurations:
|
||
|
||
* ``CONFIG_NETUTILS_DHCPC=y``
|
||
* ``CONFIG_NETUTILS_DHCPD=y``
|
||
* ``CONFIG_NSH_DHCPC=y``
|
||
* ``CONFIG_NETINIT_DHCPC=y``
|
||
|
||
.. code:: console
|
||
|
||
nsh> ifconfig
|
||
eth0 HWaddr 00:e0:de:ad:be:ef at UP
|
||
IPaddr:10.75.24.53 DRaddr:10.75.24.1 Mask:255.255.254.0
|
||
|
||
You can use ping to test for connectivity to the host (Careful, Window firewalls
|
||
usually block ping-related ICMP traffic). On the target side, you can:
|
||
|
||
.. code:: console
|
||
|
||
nsh> ping 10.75.24.250
|
||
PING 10.75.24.250 56 bytes of data
|
||
56 bytes from 10.75.24.250: icmp_seq=1 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=2 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=3 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=4 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=5 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=6 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=7 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=8 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=9 time=0 ms
|
||
56 bytes from 10.75.24.250: icmp_seq=10 time=0 ms
|
||
10 packets transmitted, 10 received, 0% packet loss, time 10100 ms
|
||
|
||
On the host side, you should also be able to ping the RX65N-GRROSE:
|
||
|
||
.. code:: console
|
||
|
||
$ ping 10.75.24.53
|
||
|
||
Configure UDP blaster application as mentioned below:
|
||
|
||
.. code:: text
|
||
|
||
CONFIG_EXAMPLES_UDPBLASTER_HOSTIP=0x0a4b1801 (10.75.24.1) ------> Gateway IP
|
||
CONFIG_EXAMPLES_UDPBLASTER_NETMASK=0xfffffe00 (255.255.254.0) --------> Netmask
|
||
CONFIG_EXAMPLES_UDPBLASTER_TARGETIP=0x0a4b189b (10.75.24.155) ---------> Target IP
|
||
|
||
RSPI
|
||
----
|
||
|
||
For GRROSE board only channel 1 can be tested since RSPI channel1 pinout is only
|
||
brought out as Pin number 2 and 3 in CN4 is used for MOSIB and MISOB
|
||
respectively.
|
||
|
||
USB Host
|
||
========
|
||
|
||
For the RX65N RSK2MB board, to be used as USB Device, the following Jumper
|
||
settings need to be done:
|
||
|
||
* J7: Short Pin 1 & Pin 2
|
||
* J16: Short Pin 2 & Pin 3
|
||
|
||
USB Device
|
||
==========
|
||
|
||
For the RX65N RSK2MB board, to be used as USB Device, the following Jumper
|
||
settings need to be done:
|
||
|
||
* J7: Short Pin 2 & Pin 3
|
||
* J16: Short Pin 1 & Pin 2
|
||
|
||
RTC
|
||
===
|
||
|
||
RTC Testing
|
||
-----------
|
||
|
||
The test cases mentioned in Renesas_RX65N_RTC_Test_Cases.xls are to be executed
|
||
as part of RTC testing.
|
||
|
||
The following configurations are to be enabled as part of testing RTC examples.
|
||
|
||
* ``CONFIG_EXAMPLES_ALARM``
|
||
* ``CONFIG_EXAMPLES_PERIODIC``
|
||
* ``CONFIG_EXAMPLES_CARRY``
|
||
|
||
USB Device Configurations
|
||
--------------------------
|
||
|
||
The following configurations need to be enabled for USB Device
|
||
|
||
* ``CONFIG_USBDEV``
|
||
* ``CONFIG_CDCACM``
|
||
* ``CONFIG_STDIO_BUFFER_SIZE=64``
|
||
* ``CONFIG_STDIO_LINEBUFFER``
|
||
|
||
USB Device Testing
|
||
------------------------
|
||
|
||
The following testing is executed as part of USB Device testing on RX65N target
|
||
for GRROSE board:
|
||
|
||
.. code:: console
|
||
|
||
$ echo "This is a test for USB Device" > /dev/ttyACM0
|
||
$ xd 0 0x20000 > /dev/ttyACM0
|
||
|
||
The output of the commands mentioned above should be seen on the USB Device COM
|
||
port on teraterm
|
||
|
||
RSPI Configurations
|
||
-------------------
|
||
|
||
The following configurations need to be enabled for RSPI
|
||
|
||
* ``CONFIG_SYSTEM_SPITOOL=y``
|
||
|
||
RSPI Testing
|
||
------------
|
||
|
||
The following testing is executed as part of RSPI testing on RX65N target for
|
||
GRROSE board
|
||
|
||
On GRROSE board only channel 1 can be tested since RSPI channel1 pinout is only
|
||
brought out.
|
||
|
||
The following command can be used for testing RSPI communication to the slave
|
||
device:
|
||
|
||
.. code:: console
|
||
|
||
$ spi exch -b 0 -x 4 aabbccdd
|
||
|
||
where b is bus number and x is number of words to exchange.
|
||
|
||
RIIC Configurations
|
||
-------------------
|
||
|
||
The following configurations need to be enabled for RIIC
|
||
|
||
* ``CONFIG_SYSTEM_I2CTOOL=y``
|
||
|
||
RIIC Testing
|
||
------------
|
||
|
||
On GRROSE board, none of the RIIC channel pins are brought out in the board so
|
||
not tested for communication.
|
||
|
||
DTC Configurations
|
||
------------------
|
||
|
||
The following configurations need to be enabled for DTC.
|
||
|
||
* ``CONFIG_SYSTEM_SPITOOL=y``
|
||
|
||
DTC Testing
|
||
-----------
|
||
|
||
DTC has been tested using RSPI driver.
|
||
|
||
USB Host Configurations
|
||
-----------------------
|
||
|
||
The following configurations need to be enabled for USB Host Mode driver to
|
||
support USB HID Keyboard class and MSC Class.
|
||
|
||
* ``CONFIG_USBHOST=y``
|
||
* ``CONFIG_USBHOST_HIDKBD=y``
|
||
* ``CONFIG_FS_FAT=y``
|
||
* ``CONFIG_EXAMPLES_HIDKBD=y``
|
||
|
||
USB Host Driver Testing
|
||
------------------------
|
||
|
||
The Following Class Drivers were tested as mentioned below:
|
||
|
||
- USB HID Keyboard Class
|
||
|
||
On the NuttX Console "hidkbd" application was executed
|
||
|
||
.. code:: console
|
||
|
||
nsh> hidkbd
|
||
|
||
The characters typed from the keyboard were executed correctly.
|
||
|
||
- USB MSC Class
|
||
|
||
The MSC device is enumerated as ``sda`` in ``/dev`` directory.
|
||
|
||
The block device is mounted using the command as mentioned below:
|
||
|
||
.. code:: console
|
||
|
||
$ mount -t vfat /dev/sda /mnt
|
||
|
||
The MSC device is mounted in ``/dev`` directory
|
||
|
||
The copy command is executed to test the Read/Write functionality
|
||
|
||
.. code:: console
|
||
|
||
$ cp /mnt/<file.txt> /mnt/file_copy.txt
|
||
|
||
USB Host Hub Configurations
|
||
---------------------------
|
||
|
||
The following configurations need to be enabled for USB Host Mode driver to
|
||
support USB HID Keyboard class and MSC Class.
|
||
|
||
* ``CONFIG_RX65N_USBHOST=y``
|
||
* ``CONFIG_USBHOST_HUB=y``
|
||
* ``CONFIG_USBHOST_ASYNCH=y``
|
||
* ``CONFIG_USBHOST=y``
|
||
* ``CONFIG_USBHOST_HIDKBD=y``
|
||
* ``CONFIG_FS_FAT=y``
|
||
* ``CONFIG_EXAMPLES_HIDKBD=y``
|
||
|
||
USB Host Hub Driver Testing
|
||
---------------------------
|
||
|
||
The Following Class Drivers were tested as mentioned below :
|
||
|
||
- USB HID Keyboard Class
|
||
|
||
On the NuttX Console "hidkbd" application was executed
|
||
|
||
.. code:: console
|
||
|
||
nsh> hidkbd
|
||
|
||
The characters typed from the keyboard were executed correctly.
|
||
|
||
- USB MSC Class
|
||
|
||
The MSC device is enumerated as ``sda`` in ``/dev`` directory.
|
||
|
||
The block device is mounted using the command as mentioned below:
|
||
|
||
.. code:: console
|
||
|
||
$ mount -t vfat /dev/sda /mnt
|
||
|
||
The MSC device is mounted in ``/dev`` directory
|
||
|
||
The copy command is executed to test the Read/Write functionality
|
||
|
||
.. code:: console
|
||
|
||
$ cp /mnt/<file.txt> /mnt/file_copy.txt
|
||
|
||
Debugging
|
||
=========
|
||
|
||
1. NuttX needs to be compiled in Cygwin.
|
||
|
||
The following Configuration needs to be set, in order to do source level
|
||
debugging:
|
||
|
||
``CONFIG_DEBUG_SYMBOLS=y`` (Set this option, using menuconfig only, DO NOT
|
||
Enable this as default configuration).
|
||
|
||
2. Download & Install Renesas e2studio IDE.
|
||
3. Load the project(NuttX built on Cygwin) as Makefile project with existing code
|
||
4. Right click on the project, and select Debug Configurations.
|
||
5. The binary(NuttX) needs to be loaded using E1/E2 Emulator.
|
||
6. Select the Device name as R5F565NE and Emulator as E1/E2(whichever is being used)
|
||
7. Select Connection type as FINE.
|
||
8. Load and run the binary.
|
||
|
||
Flashing NuttX
|
||
==============
|
||
|
||
Alternatively, NuttX binary can be flashed using Renesas flash programmer tool
|
||
without using e2 studio/Cygwin
|
||
|
||
Below are the steps mentioned to flash NuttX binary using Renesas flash
|
||
programmer tool(RFP).
|
||
|
||
1. In order to flash using Renesas flash programmer tool, nuttx.mot file should
|
||
be generated.
|
||
|
||
2. Add the following lines in tools/Unix.mk file:
|
||
|
||
.. code:: makefile
|
||
|
||
ifeq ($(CONFIG_MOTOROLA_SREC),y)
|
||
@echo "CP: nuttx.mot"
|
||
$(Q) $(OBJCOPY) $(OBJCOPYARGS) $(BIN) -O srec -I elf32-rx-be-ns nuttx.mot
|
||
endif
|
||
|
||
3. Add ``CONFIG_MOTOROLA_SREC=y`` in defconfig file or choose ``make
|
||
menuconfig`` -> Build Setup -> Binary Output Format -> Select Motorola SREC
|
||
format.
|
||
|
||
4. Download Renesas flash programmer tool from
|
||
https://www.renesas.com/in/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html#downloads
|
||
|
||
5. Refer to the user manual document, for steps to flash NuttX binary using RFP
|
||
tool.
|
||
|
||
ROMFS
|
||
======
|
||
|
||
Overview
|
||
--------
|
||
|
||
This directory contains logic to support a custom ROMFS system-init script and
|
||
start-up script. These scripts are used by by the NSH when it starts provided
|
||
that ``CONFIG_ETC_ROMFS=y``. These scripts provide a ROMFS volume that will be
|
||
mounted at /etc and will look like this at run-time:
|
||
|
||
.. code:: console
|
||
|
||
NuttShell (NSH) NuttX-8.2
|
||
nsh> ls -Rl /etc
|
||
/etc:
|
||
dr-xr-xr-x 0 .
|
||
-r--r--r-- 20 group
|
||
dr-xr-xr-x 0 init.d/
|
||
-r--r--r-- 35 passwd
|
||
/etc/init.d:
|
||
dr-xr-xr-x 0 ..
|
||
-r--r--r-- 110 rcS
|
||
-r--r--r-- 110 rc.sysinit
|
||
nsh>
|
||
|
||
``/etc/init.d/rc.sysinit`` is system init script; ``/etc/init.d/rcS`` is the
|
||
start-up script; ``/etc/passwd`` is the password file.
|
||
|
||
The ``/etc/passwd`` file is auto-generated at build time when
|
||
``CONFIG_BOARD_ETC_ROMFS_PASSWD_ENABLE`` is set. See :ref:`mkpasswd_autogen`
|
||
for the full setup (admin password, TEA keys, NSH encrypted-password login).
|
||
|
||
* ``CONFIG_BOARD_ETC_ROMFS_PASSWD_ENABLE=y``
|
||
* ``CONFIG_BOARD_ETC_ROMFS_PASSWD_USER`` (default: ``root``)
|
||
* Admin password and TEA keys — set in menuconfig (not saved in defconfig)
|
||
|
||
The password is hashed with TEA by ``tools/mkpasswd``; the plaintext is **not**
|
||
stored in the firmware.
|
||
|
||
The format of the password file is:
|
||
|
||
.. code:: text
|
||
|
||
user:encrypted_hash:uid:gid:home
|
||
|
||
Where:
|
||
user: User name
|
||
encrypted_hash: TEA-encrypted password (base64)
|
||
uid: User ID
|
||
gid: Group ID
|
||
home: Login directory
|
||
|
||
``/etc/group`` is a group file. It is not currently used.
|
||
|
||
.. code:: console
|
||
|
||
nsh> cat /etc/group
|
||
root:*:0:root,admin
|
||
|
||
The format of the group file is:
|
||
|
||
.. code:: text
|
||
|
||
group:x:gid:users
|
||
|
||
Where:
|
||
group: The group name
|
||
x: Group password
|
||
gid: Group ID
|
||
users: A comma separated list of members of the group
|
||
|
||
``/etc/init.d/rcS`` should have the following contents:
|
||
|
||
.. code:: text
|
||
|
||
vi rcS
|
||
echo "This is NuttX"
|
||
|
||
Updating the ROMFS File System
|
||
------------------------------
|
||
|
||
The content on the ``nsh_romfsimg.h`` header file is generated from a sample
|
||
directory structure. That directory structure is contained in the ``etc/``
|
||
directory and can be modified per the following steps:
|
||
|
||
1. Change directory to etc/:
|
||
|
||
.. code:: console
|
||
|
||
$ cd etc/
|
||
|
||
2. Make modifications as desired.
|
||
|
||
3. Create the new ROMFS image.
|
||
|
||
.. code:: console
|
||
|
||
$ genromfs -f romfs_img -d etc -V SimEtcVol
|
||
|
||
4. Convert the ROMFS image to a C header file
|
||
|
||
.. code:: console
|
||
|
||
$ xxd -i romfs_img >nsh_romfsimg.h
|
||
|
||
5. Edit ``nsh_romfsimg.h``, mark both data definitions as ``const`` so that that
|
||
will be stored in FLASH.
|