Я новичок в разработке Android, но я хочу написать драйвер SPI для подключения ИС SPI, а затем приложение Android для отправки и получения данных от и до ИС.
Оттуда я действительно не знаю, где создать драйвер (и что он должен содержать) и как связать приложение поверх этого.У меня есть настраиваемое ядро Android (9.0 Pie, APQ8096_LA.UM.7.5.r1-03100-8x96.0_P_v5.0 ) со всеми его .dts, .dtsi, .c и так далее.Я также получил eval доску и соответствующую документацию для картирования.
Я гуглил неделю и не нашел то, что искал.Я немного узнал о системе дерева устройств.Поскольку у меня есть Snapdragon 820 msm8996, я изменил «msm8996-blsp.dtsi» и «msm8996-pinctrl.dtsi».У меня был этот бит кода:
msm8996-pinctrl.dtsi
&soc {
...
spi_0 {
spi_0_active: spi_0_active {
spi_0 {
pins = "gpio0", "gpio1", "gpio2", "gpio3";
function = "blsp_spi1";
drive-strength = <6>;
bias-disable;
};
};
spi_0_sleep: spi_0_sleep {
spi_0 {
pins = "gpio0", "gpio1", "gpio2", "gpio3";
function = "blsp_spi1";
drive-strength = <6>;
bias-disable;
};
};
};
...
msm8996-blsp.dtsi
&soc {
...
spi_0: spi@7575000 { //QUP Base address for BLSP1_QUP0
compatible = "qcom,spi-qup-v2"; //Manufacturer and Model
#address-cells = <1>;
#size-cells = <0>;
reg-names = "spi_physical", "spi_bam_physical";
reg = <0x07575000 0x600>,
<0x07544000 0x2b000>;
interrupt-names = "spi_irq", "spi_bam_irq";
interrupts = <0 95 0>, <0 238 0>;
spi-max-frequency = <5000000>; //Maximum supported frequency in HZ
qcom,infinite-mode = <0>;
qcom,use-bam; // Enable BAM mode
/* Add BAM pipes */
qcom,bam-consumer-pipe-index = <12>;
qcom,bam-producer-pipe-index = <13>;
qcom,ver-reg-exists;
qcom,master-id = <86>;
qcom,use-pinctrl;
pinctrl-names = "spi_default", "spi_sleep";
pinctrl-0 = <&spi_0_active>;
pinctrl-1 = <&spi_0_sleep>;
clock-names = "iface_clk", "core_clk";
clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
<&clock_gcc clk_gcc_blsp1_qup1_spi_apps_clk>;
status = "enabled";
}
...
Я собираю это ядро с помощью
$ ./build.sh msm8996 -j $(nproc)
Я прошил eval board с помощью fastboot, а затем зашел в adb.
$ adb root
$ adb wait-for-device
$ adb shell
# cd /sys/class/spi_master
# ls
// Nothing here
Учитывая, что мой spi-адрес определен в @ 7575000,Я ожидал, что результат будет
# spi_0
Правильно ли мой код, чтобы включить его (я не очень хорошо разбираюсь в дереве устройств)?Если так, то почему не видно с ADB и как я должен сделать его видимым?Какими должны быть следующие шаги для доступа к этому SPI с помощью приложения для Android?
Я искал stackoverflow и так много мест, но написание драйверов устройств для Android, похоже, не является распространенным ...