On this study we focus on the eNodeB process of OpenAirInterface, but there are other three main components: The Evolved Packet Core, The UE and The RRH (when fronthaul is used)
The main file of eNodeB application is the lte_softmodem.c this process starts six threads, the following list shows where these threads are defined and started, along with the purpose of each thread.
- eNB_thread: defined here, started here
- Thread to send/receive data to/from RF frontend
- eNB_thread_tx: defined here, started here
- Thread to generate the downlink signal for RF frontend
- By default 10 threads of this type are generated.
- eNB_thread_rx: defined here, started here
- Thread to process the Uplink acquired from RF frontend
- By default 10 threads of this type are generated.
- scope_thread: defined here, started here
- Thread to update the information shown in the scope (enabled with -d in the command line argument)
- emos_thread: defined here, started here
- The EMOS (Eurecom MIMO Openair Sounder) allows multi-user MIMO channel measurements in real time
- At this commit the EMOS functions may by unstable,
- More at eurecon wiki
- gps_thread: defined here, started here
- GPS synchronization reference used at EMOS
Since in this study we are interested in the LTE signal, just the second and third threads are focused, the following list shows an overview of the operations done in both eNB_thread_tx and eNB_thread_rx.
-
eNB_thread_tx
- Configure the thread affinity if the CPU have more than 2 processors
- Configure Scheduling priority
- Infinity Loop:
- Block and/or wait on Mutexes
- Call phy_procedures_eNB_TX() to generate LTE data.
- Call do_OFDM_mod_rt() to modulate LTE signal.
- Unlock Mutexes
-
eNB_thread_rx
- Configure the thread affinity if the CPU have more than 2 processors
- Configure Scheduling priority
- Infinity Loop:
- Block and/or wait on Mutexes
- If (TDD and subframe_rx == SF_UL) or (FDD):
- Call phy_procedures_eNB_RX() to generate LTE data.
- If subframe_rx == SF_S
- Call phy_procedures_eNB_S_RX() to demodulate LTE signal.
- Unlock Mutexes
OBS: The thread affinity configured in both threads follows the rule:
- CPU 0 is reserved for UHD threads
- CPU 1 is reserved for TX threads
- CPU 2 ... MAX_CPUS are reserved for RX threads.
From both threads we divide the functions in Downlink and Uplink as shown in the following list: