
应客户需求,需要将Android系统里面的串口4(/dev/ttyS4)节点名称修改为/dev/ttyS9。
由于设备节点都是在驱动里面注册生成的于是查看串口驱动。根据log信息找到了系统串口驱动\kernel\drivers\tty\serial\8250\8250_dwc中的注册函数dw8250_probe。该函数中找到serial8250_register_8250_port,这个是注册设备节点的函数。然后查看serial8250_register_8250_port函数定义(kernel\drivers\tty\serial\8250\8250_corec),找到了后续注册节点的函数uart_add_one_port,继续查看该函数(位于kernel\drivers\tty\serial\serial_corec)定义,该函数又是调用tty_port_register_device_attr进行注册的,继续跟踪该函数(kernel\drivers\tty\tty_portc),该函数又是调用了tty_register_device_attr(位于kernel\drivers\tty\tty_ioc)进行注册。添加log分析得知串口节点的名字获取是由tty_line_name产生的。于是查看tty_line_name的实现:
static ssize_t tty_line_name(struct tty_driver driver, int index, char p)
{
if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
return sprintf(p, "%s", driver->name);
else
return sprintf(p, "%s%d", driver->name,
index + driver->name_base);
}
}
通过打印得知串口节点设备名称是由驱动名称 driver->name和串口序号index 组成的,于是添加判断 driver->name是否为"ttyS",index是否为4,如果是就替换。
AT命令(Attention)在手机中,用于对modem(也就是移动模块)通过串口命令进行 *** 作,处理与语音电话、短信和数据。
关于AT命令:
Android系统与AT命令
对于智能手机,AP和BP分离的情况,在AP上的系统通过串口和BP通信是个不错方式。在Android的源码中有一个内部包comandroidinternaltelephony中有对AT命令的封装和解析,但这种internal的包开发者不能调用的SDK部分,可以用来封装ROM。这说明Android对AT command的方式是支持的。
对于Android如何调用AT command
用root登录命令行,直接对串口进行 *** 作,如echo -e "AT\r" > /dev/smd0
具体的串口,不同设备会有不同,甚至不一定会提供。这种方式,开发者是可以调用的,通过Runtimeexec直接执行命令行命令,但要求是root,例如echo -e "ATD123456789;\r" > /dev/smd0,拨打123456789的号码。
目前最新的AT命令标准发布与2014627,似乎还活得挺滋润的。但是给出的keywords是UMTS, GSM, command, terminal, LTE这说明CDMA确实很可能不是采用AT命令的方式。
根据用户的使用过程体验,可以将 Android 涉及的权限大致分为如下三类:
(1)Android 手机所有者权限:自用户购买 Android 手机后,用户不需要输入任何密码,就具有安装一般应用软件、使用应用程序等的权限;
(2)Android root 权限:该权限为 Android 系统的最高权限,可以对所有系统中文件、数据进行任意 *** 作。出厂时默认没有该权限,需要使用 z4Root 等软件进行获取,然而,并不鼓励进行此 *** 作,因为可能由此使用户失去手机原厂保修的权益。同样,如果将 Android 手机进行 root 权限提升,则此后用户不需要输入任何密码,都将能以 Android root 权限来使用手机。
(3)Android 应用程序权限:Android 提供了丰富的 SDK(Software development kit),开发人员可以根据其开发 Android 中的应用程序。而应用程序对 Android 系统资源的访问需要有相应的访问权限,这个权限就称为 Android 应用程序权限,它在应用程序设计时设定,在 Android 系统中初次安装时即生效。值得注意的是:如果应用程序设计的权限大于 Android 手机所有者权限,则该应用程序无法运行。如:没有获取 Android root 权限的手机无法运行 Root Explorer,因为运行该应用程序需要 Android root 权限。
Android 系统权限定义
Android 系统在 /system/core/private/android_filesystem_configh 头文件中对 Android 用户 / 用户组作了如下定义,且权限均基于该用户 / 用户组设置。
值得注意的是:每个应用程序在安装到 Android 系统后,系统都会为其分配一个用户 ID,如 app_4、app_11 等。以下是 Calendar 和 Terminal 软件在 Android 系统中进程浏览的结果(其中,黑色字体标明的即为应用分配的用户 ID):
在 Android 系统中,上述用户 / 用户组对文件的访问遵循 Linux 系统的访问控制原则,即根据长度为 10 个字符的权限控制符来决定用户 / 用户组对文件的访问权限。该控制符的格式遵循下列规则:
第 1 个字符:表示一种特殊的文件类型。其中字符可为 d( 表示该文件是一个目录 )、b( 表示该文件是一个系统设备,使用块输入 / 输出与外界交互,通常为一个磁盘 )、c( 表示该文件是一个系统设备,使用连续的字符输入 / 输出与外界交互,如串口和声音设备 ),“”表示该文件是一个普通文件,没有特殊属性。
2 ~ 4 个字符:用来确定文件的用户 (user) 权限;
5 ~ 7 个字符:用来确定文件的组 (group) 权限;
8 ~ 10 个字符:用来确定文件的其它用户 (other user,既不是文件所有者,也不是组成员的用户 ) 的权限。
第 2、5、8 个字符是用来控制文件的读权限的,该位字符为 r 表示允许用户、组成员或其它人可从该文件中读取数据。短线“-”则表示不允许该成员读取数据。
第 3、6、9 位的字符控制文件的写权限,该位若为 w 表示允许写,若为“-”表示不允许写。
第 4、7、10 位的字符用来控制文件的制造权限,该位若为 x 表示允许执行,若为“-”表示不允许执行。
举个例子,“drwxrwxr-- 2 root root 4096 2 月 11 10:36 lu”表示的访问控制权限(黑色字体标明)为:因为 lu 的第 1 个位置的字符是 d,所以由此知道 lu 是一个目录。第 2 至 4 位置上的属性是 rwx,表示用户 root 拥有权限列表显示 lu 中所有的文件、创建新文件或者删除 lu 中现有的文件,或者将 lu 作为当前工作目录。第 5 至 7 个位置上的权限是 rwx,表示 root 组的成员拥有和 root 一样的权限。第 8 至 10 位上的权限仅是 r--,表示不是 root 的用户及不属于 root 组的成员只有对 lu 目录列表的权限。这些用户不能创建或者删除 lu 中的文件、执行 junk 中的可执行文件,或者将 junk 作为他们的当前工作目录。
Android 应用程序权限申请
每个应用程序的 APK 包里面都包含有一个 AndroidMainifestxml 文件,该文件除了罗列应用程序运行时库、运行依赖关系等之外,还会详细地罗列出该应用程序所需的系统访问。程序员在进行应用软件开发时,需要通过设置该文件的 uses-permission 字段来显式地向 Android 系统申请访问权限。
网上有个叫SerialPort的安卓开源工程,你可以下载下来参考
>
目前只要是安卓系统都是可以ROOT,其中部分ROM屏蔽了ROOT,所以不能直接ROOT,但是可以直接刷机,比如MI2,而中兴手机也有不用ROOT的,,,他的权限是自动打开的,,,所有很方便,但是不是所有机型都是这样。。。你可以手机连接电脑,安装甜椒,自动获取驱动连接后,选择ROOT破解,即可,,,重启后,如果已经ROOT,直接安装SUPERUSER即可。。如果仍然不能ROOT,可以试试其他刷机工具,XIAZAIBA有很多,。,,来自--IT狂魔(知道团队)
android串口消息连接的方法为:
1模拟器可以使用PC的串口。
启动模拟器并加载PC串口 命令如下。
运行 emulator @模拟器名称 -qmu -serial COM1。
2查看串口是否被加载。
启动后使用 adb shell 命令打开命令行
cd dev 查看会发现ttyS0 ttyS1 ttyS2,其他ttyS2 就是我们加载上来的串口COM1
3修改权限
chmod 777 ttyS2
现在我们可以开发串口程序了。
4串口程序实例
下载libserial_portso ,放入libs/armeabi 目录,可以自己创建此目录
libserial_portso 下载地址:
>
1、首先,不能用虚拟机,不须用真机
2、可以查找周围蓝牙设备,当搜索到你要连接到的蓝牙设备,停止discovering,然后就自动连接。或者是,如果你确定手机和蓝牙设备已经配对成功过,那也可以用 getBundedDevice指令,获取配对成功的蓝牙设备,在配对成功的蓝牙设备里查找到后实现连接。这两种方法后者会比较好一些,一般时间相差3到4秒。
这样配对连接成功后就可以尝试输入输出流来实现数据发送接收了
1 如果是linux,不需要单独安装什么串口驱动
2 但需要使用ls /dev/tty 查看usb 串口设备是否被检测到
2 然后使用linux下的MINICOM进行串口信息打印,具体配置和用法可以baidu一下
以上就是关于Android8.1系统修改串口节点全部的内容,包括:Android8.1系统修改串口节点、Android平台到底能不能通过串口发送AT指令呢,急!!!、Android 的权限管理是怎么实现的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)