시스템 시작
PX4 시작은 쉘 스크립트에 의해 제어됩니다. On NuttX they reside in the ROMFS/px4fmu_common/init.d folder - some of these are also used on Posix (Linux/MacOS). The scripts that are only used on Posix are located in ROMFS/px4fmu_common/init.d-posix.
All files starting with a number and underscore (e.g. 10000_airplane
) are predefined airframe configurations. They are exported at build-time into an airframes.xml
file which is parsed by QGroundControl for the airframe selection UI. Adding a new configuration is covered here.
나머지 파일은 공통 시작 로직의 일부입니다. The first executed file is the init.d/rcS script (or init.d-posix/rcS on Posix), which calls all other scripts.
다음 섹션은 PX4가 실행되는 운영 체제에 따라 달라집니다.
POSIX (Linux/MacOS)
Posix에서 시스템 셸은 스크립트 인터프리터로 사용됩니다(예: /bin/sh, Ubuntu에서 dash에 심볼릭 링크됨). 동작하기 위한 몇가지 조건이 있습니다.
PX4 모듈은 시스템에서 개별적으로 실행할 수 있어야합니다. 이 동작은 심볼릭 링크로 처리합니다. For each module a symbolic link
px4-<module> -> px4
is created in thebin
directory of the build folder. When executed, the binary path is checked (argv[0]
), and if it is a module (starts withpx4-
), it sends the command to the main px4 instance (see below).TIP
The
px4-
prefix is used to avoid conflicts with system commands (e.g.shutdown
), and it also allows for simple tab completion by typingpx4-<TAB>
.
:::
쉘은 심볼릭 링크를 찾을 위치를 알고 있어야 합니다. For that the
bin
directory with the symbolic links is added to thePATH
variable right before executing the startup scripts.쉘은 각 모듈을 새로운(클라이언트) 프로세스로 시작합니다. 각 클라이언트 프로세스는 실제 모듈이 스레드로 실행되는 px4(서버)의 기본 인스턴스와 통신합니다. This is done through a UNIX socket. 서버는 클라이언트가 연결하고 명령을 보낼 수 있는 소켓으로 수신 대기합니다. 그런 다음 서버는 출력과 반환 코드를 다시 클라이언트로 전송합니다.
The startup scripts call the module directly, e.g.
commander start
, rather than using thepx4-
prefix. This works via aliases: for each module an alias in the form ofalias <module>=px4-<module>
is created in the filebin/px4-alias.sh
.The
rcS
script is executed from the main px4 instance. It does not start any modules, but first updates thePATH
variable and then simply runs a shell with thercS
file as argument.그 외에도, 다중 기체 시뮬레이션을 위하여 여러 서버 인스턴스를 시작할 수 있습니다. A client selects the instance via
--instance
. The instance is available in the script via$px4_instance
variable.
모듈은 PX4가 시스템에서 실행 중이면, 터미널에서 실행할 수 있습니다. 예:
sh
cd <PX4-Autopilot>/build/px4_sitl_default/bin
./px4-commander takeoff
./px4-listener sensor_accel
Dynamic Modules
일반적으로 모든 모듈은 단일 PX4 실행 파일로 컴파일됩니다. However, on Posix, there's the option of compiling a module into a separate file, which can be loaded into PX4 using the dyn
command.
sh
dyn ./test.px4mod
NuttX
NuttX has an integrated shell interpreter (NuttShell (NSH)), and thus scripts can be executed directly.
시스템 부팅 디버깅
소프트웨어 구성 요소의 드라이버 오류로 인하여 부팅이 중단되지는 않습니다. This is controlled via set +e
in the startup script.
The boot sequence can be debugged by connecting the system console and power-cycling the board. 부팅 로그에는 부팅 순서에 대한 자세한 정보가 포함되어 있으며, 부팅 중단 이유에 대한 힌트가 포함되어 있습니다.
일반적인 부팅 실패 사례
- For custom applications: The system was out of RAM. Run the
free
command to see the amount of free RAM. - A software fault or assertion resulting in a stack trace
시스템 시작 변경
The whole boot can be replaced by creating a file /etc/rc.txt
on the microSD card with a new configuration (nothing in the old configuration will be auto-started, and if the file is empty, nothing at all will be started).
Customizing the default boot is almost always a better approach. This is documented below.
시스템 시작 사용자 정의
The best way to customize the system startup is to introduce a new frame configuration. The frame configuration file can be included in the firmware or on an SD Card.
If you only need to "tweak" the existing configuration, such as starting one more application or setting the value of a few parameters, you can specify these by creating two files in the /etc/
directory of the SD Card:
- /etc/config.txt: modify parameter values
- /etc/extras.txt: start applications
The files are described below.
WARNING
The system boot files are UNIX FILES which require UNIX LINE ENDINGS. Windows에서 편집하는 경우 적절한 편집기를 사용하여야 합니다.
INFO
These files are referenced in PX4 code as /fs/microsd/etc/config.txt
and /fs/microsd/etc/extras.txt
, where the root folder of the microsd card is identified by the path /fs/microsd
.
구성 사용자 정의(config.txt)
The config.txt
file can be used to modify parameters. It is loaded after the main system has been configured and before it is booted.
For example, you could create a file on the SD card, etc/config.txt
with that sets parameter values as shown:
sh
param set-default PWM_MAIN_DIS3 1000
param set-default PWM_MAIN_MIN3 1120
Starting Additional Applications (extras.txt)
The extras.txt
can be used to start additional applications after the main system boot. 일반적으로, 페이로드 콘트롤러나 유사한 선택적 사용자 지정 구성 요소들입니다.
WARNING
Calling an unknown command in system boot files may result in boot failure. 일반적으로 시스템은 부팅 실패 후 mavlink 메시지를 스트리밍하지 않습니다. 이 경우 시스템 콘솔에 인쇄된 오류 메시지를 확인하여야 합니다.
다음 예는 사용자 정의 애플리케이션 시작 방법을 설명합니다.
Create a file on the SD card
etc/extras.txt
with this content:shcustom_app start
A command can be made optional by gating it with the
set +e
andset -e
commands:shset +e optional_app start # Will not result in boot failure if optional_app is unknown or fails set -e mandatory_app start # Will abort boot if mandatory_app is unknown or fails