| /**************************************************************************** |
| * drivers/drivers_initialize.c |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. The |
| * ASF licenses this file to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| * |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| #include <nuttx/clk/clk_provider.h> |
| #include <nuttx/crypto/crypto.h> |
| #include <nuttx/drivers/drivers.h> |
| #include <nuttx/drivers/rpmsgdev.h> |
| #include <nuttx/drivers/rpmsgblk.h> |
| #include <nuttx/fs/loop.h> |
| #include <nuttx/fs/smart.h> |
| #include <nuttx/fs/loopmtd.h> |
| #include <nuttx/input/uinput.h> |
| #include <nuttx/mtd/mtd.h> |
| #include <nuttx/net/loopback.h> |
| #include <nuttx/net/tun.h> |
| #include <nuttx/net/telnet.h> |
| #include <nuttx/note/note_driver.h> |
| #include <nuttx/power/pm.h> |
| #include <nuttx/power/regulator.h> |
| #include <nuttx/segger/rtt.h> |
| #include <nuttx/sensors/sensor.h> |
| #include <nuttx/serial/pty.h> |
| #include <nuttx/serial/uart_ram.h> |
| #include <nuttx/syslog/syslog.h> |
| #include <nuttx/syslog/syslog_console.h> |
| #include <nuttx/trace.h> |
| #include <nuttx/usrsock/usrsock_rpmsg.h> |
| #include <nuttx/virtio/virtio.h> |
| #include <nuttx/drivers/optee.h> |
| |
| /**************************************************************************** |
| * Pre-processor Definitions |
| ****************************************************************************/ |
| |
| /* Check if only one console device is selected. |
| * If you get this errro, search your .config file for CONSOLE_XXX_CONSOLE |
| * options and remove what is not needed. |
| */ |
| |
| #if (defined(CONFIG_LWL_CONSOLE) + defined(CONFIG_SERIAL_CONSOLE) + \ |
| defined(CONFIG_CDCACM_CONSOLE) + defined(CONFIG_PL2303_CONSOLE) + \ |
| defined(CONFIG_SERIAL_RTT_CONSOLE) + defined(CONFIG_RPMSG_UART_CONSOLE)) > 1 |
| # error More than one console driver selected. Check your configuration ! |
| #endif |
| |
| /**************************************************************************** |
| * Public Functions |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Name: drivers_early_initialize |
| * |
| * Description: |
| * drivers_early_initialize will be called once before OS initialization |
| * when no system resource is ready to use. |
| * |
| * drivers_early_initialize serves the purpose of bringing up drivers as |
| * early as possible, so they can be used even during OS initialization. |
| * It must not rely on any system resources, such as heap memory. |
| * |
| ****************************************************************************/ |
| |
| void drivers_early_initialize(void) |
| { |
| #ifdef CONFIG_DRIVERS_NOTE |
| note_early_initialize(); |
| #endif |
| } |
| |
| /**************************************************************************** |
| * Name: drivers_initialize |
| * |
| * Description: |
| * drivers_initialize will be called once during OS initialization after |
| * the basic OS services have been initialized. |
| * |
| * drivers_initialize is called after the OS initialized but before the |
| * user initialization logic has been started and before the libraries |
| * have been initialized. OS services and driver services are available. |
| * |
| ****************************************************************************/ |
| |
| void drivers_initialize(void) |
| { |
| drivers_trace_begin(); |
| |
| /* Register devices */ |
| |
| syslog_initialize(); |
| |
| #ifdef CONFIG_SERIAL_RTT |
| serial_rtt_initialize(); |
| #endif |
| |
| #if defined(CONFIG_DEV_NULL) |
| devnull_register(); /* Standard /dev/null */ |
| #endif |
| |
| #if defined(CONFIG_DEV_RANDOM) |
| devrandom_register(); /* Standard /dev/random */ |
| #endif |
| |
| #if defined(CONFIG_DEV_URANDOM) |
| devurandom_register(); /* Standard /dev/urandom */ |
| #endif |
| |
| #if defined(CONFIG_DEV_ZERO) |
| devzero_register(); /* Standard /dev/zero */ |
| #endif |
| |
| #if defined(CONFIG_DEV_LOOP) |
| loop_register(); /* Standard /dev/loop */ |
| #endif |
| |
| #if defined(CONFIG_DEV_ASCII) |
| devascii_register(); /* Non-standard /dev/ascii */ |
| #endif |
| |
| #if defined(CONFIG_DRIVERS_NOTE) |
| note_initialize(); /* Non-standard /dev/note */ |
| #endif |
| |
| #if defined(CONFIG_CLK_RPMSG) |
| clk_rpmsg_server_initialize(); |
| #endif |
| |
| #if defined(CONFIG_REGULATOR_RPMSG) |
| regulator_rpmsg_server_init(); |
| #endif |
| |
| /* Initialize the serial device driver */ |
| |
| #ifdef CONFIG_RPMSG_UART |
| rpmsg_serialinit(); |
| #endif |
| |
| #ifdef CONFIG_RAM_UART |
| ram_serialinit(); |
| #endif |
| |
| /* Initialize the console device driver (if it is other than the standard |
| * serial driver). |
| */ |
| |
| #if defined(CONFIG_LWL_CONSOLE) |
| lwlconsole_init(); |
| #elif defined(CONFIG_CONSOLE_SYSLOG) |
| syslog_console_init(); |
| #endif |
| |
| #ifdef CONFIG_PSEUDOTERM_SUSV1 |
| /* Register the master pseudo-terminal multiplexor device */ |
| |
| ptmx_register(); |
| #endif |
| |
| #if defined(CONFIG_CRYPTO) |
| /* Initialize the HW crypto and /dev/crypto */ |
| |
| up_cryptoinitialize(); |
| #endif |
| |
| #ifdef CONFIG_CRYPTO_CRYPTODEV |
| devcrypto_register(); |
| #endif |
| |
| #ifdef CONFIG_UINPUT_TOUCH |
| uinput_touch_initialize(); |
| #endif |
| |
| #ifdef CONFIG_UINPUT_BUTTONS |
| uinput_button_initialize(); |
| #endif |
| |
| #ifdef CONFIG_UINPUT_KEYBOARD |
| uinput_keyboard_initialize(); |
| #endif |
| |
| #ifdef CONFIG_NET_LOOPBACK |
| /* Initialize the local loopback device */ |
| |
| localhost_initialize(); |
| #endif |
| |
| #ifdef CONFIG_NET_TUN |
| /* Initialize the TUN device */ |
| |
| tun_initialize(); |
| #endif |
| |
| #ifdef CONFIG_NETDEV_TELNET |
| /* Initialize the Telnet session factory */ |
| |
| telnet_initialize(); |
| #endif |
| |
| #ifdef CONFIG_USENSOR |
| usensor_initialize(); |
| #endif |
| |
| #ifdef CONFIG_SENSORS_RPMSG |
| sensor_rpmsg_initialize(); |
| #endif |
| |
| #ifdef CONFIG_DEV_RPMSG_SERVER |
| rpmsgdev_server_init(); |
| #endif |
| |
| #ifdef CONFIG_BLK_RPMSG_SERVER |
| rpmsgblk_server_init(); |
| #endif |
| |
| #ifdef CONFIG_RPMSGMTD_SERVER |
| rpmsgmtd_server_init(); |
| #endif |
| |
| #ifdef CONFIG_NET_USRSOCK_RPMSG_SERVER |
| /* Initialize the user socket rpmsg server */ |
| |
| usrsock_rpmsg_server_initialize(); |
| #endif |
| |
| #ifdef CONFIG_SMART_DEV_LOOP |
| smart_loop_register_driver(); |
| #endif |
| |
| #ifdef CONFIG_MTD_LOOP |
| mtd_loop_register(); |
| #endif |
| |
| #ifdef CONFIG_DRIVERS_VIRTIO |
| virtio_register_drivers(); |
| #endif |
| |
| #ifndef CONFIG_DEV_OPTEE_NONE |
| optee_register(); |
| #endif |
| |
| drivers_trace_end(); |
| } |