私は現在、imx8mm-evkベースのカスタマイズされたハードウェアで動作するようにyoctoディストリビューションを調整する作業を進めています。私は新しいマザーボードの要件に合わせてほとんどのLinuxデバイスツリーを変更し、すべてが大丈夫でしたが、デバイスツリーのUARTノードを介してBluetoothを追加したとき:
&uart1 { /* BT */
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart1>;
assigned-clocks = <&clk IMX8MM_CLK_UART1>;
assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_80M>;
fsl,uart-has-rtscts;
status = "okay";
bluetooth {
compatible = "brcm,bcm43438-bt";
shutdown-gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
host-wakeup-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>;
device-wakeup-gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;
clocks = <&osc_32k>;
max-speed = <4000000>;
clock-names = "extclk";
};
};
システムが奇妙に動作し始めます。まず、システム全体のBluetooth初期化が中断され、その理由が見つかりません。ただし、BT_HCIUARTをモジュールとしてカーネルをコンパイルすると、次のようにhci_uart_bcmの初期化の周りでランダムに停止し始めます(中断される時間の約40%、正常に開始される時間の残りの60%)。
[ OK ] Started Rule-based Manager for Device Events and Files.
[ OK ] Finished Coldplug All udev Devices.
[ OK ] Finished Create Volatile Files and Directories.
Starting Start Psplash Boot Screen...
Starting Network Time Synchronization...
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Started Start Psplash Boot Screen.
[ OK ] Started Start psplash-syst…progress communication helper.
[ OK ] Finished Update UTMP about System Boot/Shutdown.
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Initialization.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target System Time Set.
[ OK ] Reached target System Time Synchronized.
[ OK ] Started Daily rotation of log files.
[ OK ] Reached target Timers.
[ OK ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ 7.313814] caam 30900000.crypto: device ID = 0x0a16040100000000 (Era 9)
[ 7.322605] caam-snvs 30370000.caam-snvs: violation handlers armed - non-secure state
[ 7.324000] caam 30900000.crypto: job rings = 2, qi = 0
[ OK ] Listening on dropbear.socket.
[ 7.340581] CAN device driver interface
[ 7.348931] Bluetooth: HCI UART driver ver 2.3
[ 7.355484] Bluetooth: HCI UART protocol H4 registered
[ 7.362211] hci_uart_bcm serial0-0: supply vbat not found, using dummy regulator
[ 7.370252] hci_uart_bcm serial0-0: supply vddio not found, using dummy regulator
[ OK ] Listening on GPS (Global P…ioning System) Daemon Sockets.
[ 7.389583] Bluetooth: HCI UART protocol Broadcom registered
Starting Weston[ 7.404251] mcp251x spi1.0 can0: MCP2515 successfully initialized
socket.
Starting Console System Startup Logging...
[ OK ] Listening on Weston socket.
[ OK ] Finished Console System Startup Logging.
[ 7.488047] imx-sdma 302b0000.dma-controller: firmware found.
[ 7.488151] imx-sdma 302c0000.dma-controller: firmware found
その後、調査を開始し、起動中にhci_uartモジュールをブラックリストに追加し、ユーザーのプロンプトの後に挿入すると正常に機能することがわかりました。
問題は、奇妙な依存関係を挿入せずにフルブート後にLinuxにこのモジュールをロードさせる方法です(hci_uartよりもブート時に後でいくつかのモジュールを作成できますが、これは見苦しいでしょう)。または、停止の実際の原因を見つける方法は?