我写了两个应用程序(目标姜饼).让我们说app1和app2.App1有两个以"BOOT_COMPLETED"开头的服务,它们以返回值START_STICKY开头.它们在不同的线程中运行.使长话短说.其中一项服务是监视串行端口上的传入数据(一种代理,用于与串行端口另一端的接口通信的应用程序).另一个让听众观看一些系统状态并等待来自其他应用程序的一些"指令".我知道它们运行良好,因为它们列在正在运行的服务中,并且我添加了一些代码,当某些特定数据来自串行端口时,它会强制它们执行某些操作.
现在的问题是:我写了app2.它尝试绑定到app1中的某个服务.我使用了android-developper文档,并在app1和app2中的服务之间实现了双向通信.由于我只需要发送少量非常简单的数据,因此我建议使用信使.我基本上只使用"what,arg1和arg2"我没有使用AIDL接口,因为文档建议.
这是androidmanifest在app1中声明服务的部分我也尝试绑定.
<service android:name=".ModemWatcherService"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!-- Service name -->
<action android:name="com.admetric.modemwatcher.Service" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
然后,以下是在app1中处理此问题的几种方法:
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "entering onBind");
return mMessenger.getBinder();
}
/**
* Handler of incoming messages from clients.
*/
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
String logMessage = "Received meaasge what= %d, arg1= %d, arg2= %d" + String.valueOf(msg.what) + String.valueOf(msg.arg1) + String.valueOf( msg.arg2);
Log.d(TAG, logMessage);
switch (msg.what) …Run Code Online (Sandbox Code Playgroud) 我正在为我的定制板调整姜饼内核.我正在尝试更换使用片上ADC控制器(三星的S5PV210处理器)的电阻式触摸屏.在我的设计中,我需要一个eGalaxyTouch驱动程序支持的电容控制器.它连接到USB.可以从"make xconfig"菜单轻松启用驱动程序.它有点工作,因为我在串行控制台上添加了一些跟踪,我可以看到它在内核启动期间安装,我看到它在连接/断开USB电缆时安装和卸载.但它在Android用户界面中没有做任何事情.它是一种HID类型的设备.问题是它没有与正确的Android触摸屏软件层连接.我一定错过了什么.必须要有其他东西来强制将此HID连接到管理触摸屏的另一个软件层.
触摸屏驱动程序位于内核/驱动程序/输入/触摸屏.内核/驱动程序/输入中也有一些代码.
有关如何将该HID设备链接到Android触摸屏图层的任何线索?我看看他们是如何做旧电阻的,而不是通过HID完成的,因为它是一个"定制"器件,其中ADC集成在CPU中,而不是通过USB.
android touchscreen device-driver linux-kernel android-source
我正在调试数据连接,事情发生的顺序很重要.我在终端中使用带有ADB时间戳的logcat,并收集我稍后分析的小时日志.我遇到的问题是,时间戳有时不是顺序的.由于Logcat是一个循环缓冲区,我不明白为什么会这样.所以,如果时间戳中存在错误或者事件实际上没有按顺序记录,我就会徘徊,我应该参考日志序列而不是时间戳(请参阅第8和第9行转换).有人知道吗?用于获取日志的命令是:
adb logcat -b radio -v time
和日志:
...
09-06 18:32:29.426 D/GSM ( 200): getNitzTimeZone returning America/Detroit
09-06 18:32:29.434 I/AT ( 65): AT(14)< +CGDCONT: 1,"IP","pda.bell.ca","",0,0
09-06 18:32:29.434 I/AT ( 65): AT(14)< OK
09-06 18:32:29.434 E/RIL ( 65): processRequest: OPERATOR
09-06 18:32:29.434 E/AT ( 65): ---AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?;+COPS=3,2;+COPS?
09-06 18:32:29.434 I/AT ( 65): AT(14)> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?;+COPS=3,2;+COPS?
09-06 18:32:29.434 D/RILJ ( 200): [UNSL]< UNSOL_DATA_CALL_LIST_CHANGED [DataCallState: { cid: 1, active: 0, type: IP, apn: pda.bell.ca, address: }]
09-06 18:32:29.434 I/GSM ( 200): NITZ: Setting time of …Run Code Online (Sandbox Code Playgroud) 我想让android应用程序/服务访问本地串行端口(UART RS-232)。当我说本机时,我的意思是真正的UART,而不是USB到串行加密狗。我可以从终端(连接到4个本机串行端口之一)上看到它们。它表明内核已经处理了底层的工作。
# ls -l /dev
crw-rw-rw- system system 204, 67 2010-01-01 07:00 s3c2410_serial3
crw-rw-rw- system system 204, 66 2010-01-01 07:00 s3c2410_serial2
crw-rw-rw- system radio 204, 65 2010-01-01 07:00 s3c2410_serial1
crw-rw-rw- system system 204, 64 2010-01-01 07:00 s3c2410_serial0
Run Code Online (Sandbox Code Playgroud)
我用姜饼。我已将Android移植到装有S5PV210处理器的平台上。我对内核和权限拥有完全控制权。我已经修改了很多东西(包括蜂窝电话,触摸屏,LCD面板尺寸等),包括init.rc文件。
如何通过Android APK与这些设备通话?如您所见,“ s3c2410_serial1”来自用户“ radio”,因为我从中获取Gingerbread源代码的原始系统在该串行端口上具有GPRS模块。在init.rc中更改很容易。但这只是证明我们至少可以访问Android系统上的本机串行端口。
应用程序或服务将不需要控制APK的波特率或任何奇特的东西。我只想发送和接收字符。内核可以设置默认波特率,对此我感到满意。我什至不需要控制RTS / CTS。
任何提示表示赞赏。
我将一个外部驱动程序模块添加到Android Gingerbread内核(类似于Linux).我以前做过它并且它有效但这次我遇到了问题.我按照O'Reilly"Linux Device Drivers 3rd edition"中的配方进行操作,即:
在本地Makefile中,添加以下语句:
Run Code Online (Sandbox Code Playgroud)obj-m := GobiNet.o GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
在人类语言中,它意味着从GobiUSBNet.c + QMIDevice.c + QMI.c建立一个GobiNet.ko.
这适用于构建整个内核时调用makefile的情况.我在Ubuntu x86-64bit上交叉编译ARM-EABI系统(Cortex-A8).
不知何故,构建系统理解我想要的东西,因为它在编译期间说:
Run Code Online (Sandbox Code Playgroud)/home/sylvain/Projects/android_gingerbread_realv210_ver_1_0/kernel CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: `include/generated/mach-types.h' is up to date. CALL scripts/checksyscalls.sh CHK include/generated/compile.h LD drivers/cell/OptionGobiNet/built-in.o CC [M] drivers/cell/OptionGobiNet/GobiUSBNet.o CC [M] drivers/cell/OptionGobiNet/QMIDevice.o CC [M] drivers/cell/OptionGobiNet/QMI.o LD [M] drivers/cell/OptionGobiNet/GobiNet.o Kernel: arch/arm/boot/Image is ready SHIPPED arch/arm/boot/compressed/lib1funcs.S AS arch/arm/boot/compressed/lib1funcs.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready Building modules, stage 2. MODPOST 5 modules ERROR: "usbnet_suspend" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined! ERROR: …
我第一次将 Yocto 用于带有 Xilinx Zynq 的 ARM 嵌入式系统。我想进行一些需要进入 menuconfig 实用程序的配置更改。Yocto 文档展示了如何为 Linux 内核执行此操作
bitbake yocto-xlnx -c menuconfig
Run Code Online (Sandbox Code Playgroud)
其中,对于 Xilinx,我变成了
bitbake linux-xlnx -c menuconfig
Run Code Online (Sandbox Code Playgroud)
它运作良好。
现在,我想对 u-boot 执行相同的操作,并使用 menuconfig 实用程序更改 .config 文件。我在 Yocto 或 Xilinx 文档中找不到任何方法。我尝试了显而易见的
bitbake u-boot-xlnx -c menuconfig
Run Code Online (Sandbox Code Playgroud)
只是为了得到一条错误消息:
错误:目标 u-boot-xlnx 不存在任务 do_menuconfig
知道如何使用 Yocto 进入 u-boot menuconfig 吗?
编辑:这是我使用的图层
BBLAYERS ?= " \
/home/sylvain/poky/meta \
/home/sylvain/poky/meta-poky \
/home/sylvain/poky/meta-yocto-bsp \
/home/sylvain/poky/openembedded-core/meta \
/home/sylvain/poky/meta-xilinx \
"
Run Code Online (Sandbox Code Playgroud) android ×4
adb ×1
binding ×1
bitbake ×1
linux-kernel ×1
logcat ×1
makefile ×1
serial-port ×1
touchscreen ×1
u-boot ×1
yocto ×1