Android实现su权限的一种方法
背景
Platform: IMX6Q
OS: Android5.1
Kernel: 3.14.52
需求项目需求,有些功能需要root权限,但是以前做的系统没有添加su权限进去,所以就另辟蹊径用了这个办法。
实现底层init启动一个service,主要是实现一个socket服务端,监听客户端发过来的命令,然后执行它。虽然apk与该service在不同的空间,有不同的权限,但底层init启动的service具有root权限
Service服务端实现源代码大致如下#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <cutils/sockets.h>
#include <sys/un.h>
#include <neti ...
Android源码添加自己的可执行程序
背景
Platform: IMX6Q
OS: Android5.1
Kernel: 3.14.52
需求项目需要,需要在external添加自己的一些Service等二进制的可执行程序
实现
新增文件夹xxx,里面添加Android.mk和应用源码文件, Android.mk内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
xxx.cpp \
util.cpp \
#LOCAL_SHARED_LIBRARIES := \
# libcutils \
# liblog \
#LOCAL_LDLIBS :=-llog
LOCAL_MODULE := study
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_EXECUTABLES)
include $(BUILD_EXECUTABLE)
注:TARGET_OUT_EX ...
嵌入式设备PHP版本升级
背景
Platform: IMX6Q
OS: Linux-QT5
Kernel: 4.1.15
需求我们的设备在漏洞扫描中报了很多PHP的漏洞,以前使用的是PHP5,因此需要将PHP升级到最新版本.
PHP交叉编译我使用的是目前最新的版本php-7.3.12, 其他版本可能大同小异
配置./configure --host=arm-poky-linux-gnueabi --prefix=xxx/php-arm --disable-all --enable-session --without-sqlite3 --with-zlib --without-iconv --enable-json --enable-sockets --enable-fileinfo --enable-cli --enable-cgi --enable-fpm --disable-phpdbg --with-config-file-path=/etc
说明:
--enable-session --enable-json --enable-sockets --enable-fileinfo: 因为我们的web ...
Linux矩阵键盘
背景
Platform: M55S
OS: Linux
Kernel: 4
需求:项目需要添加一个类似电话机的那种矩阵键盘,开始打算自己写个扫描算法,后面发现内核自带。
过程matrix-keypad(内核自带驱动): drivers/input/keyboard/
matrix-keypad的GPIO口上拉:Godshand -w -a 0xB3F000B0 -v 0x55555000
注: 这个需要根据自己的硬件平台添加, 这个很重要,可能会导致键值不对或乱码
内核menuconfig添加驱动:DeviceDrivers --->
Inputdevice support --->
<*> Event interface
Keyboards --->
<*> GPIO driven matrix keypad support
DTS配置说明见下面注释,也可查看d ...
报错Syntax error
背景
Platform: M55S
OS: Linux
Kernel: 4
问题我自己编译没问题,同事在他的虚拟机里编译我的代码时报错:
Syntax error: end of file unexpected
主要log如下:
./make_all.sh: 5: ./make_all.sh: source: not found
...
/opt/vtcs_toolchain/vienna/usr/bin/arm-linux-gcc: 2: /opt/vtcs_toolchain/vienna/usr/bin/arm-linux-gcc: Syntax error: end of file unexpected
分析造成Syntax error主要原因有:
脚本语法错误比如没有循环没有结束标记等解决: 检查语法,没有问题
字符格式问题Windows和Linux字符格式问题,win下写的shell脚本可能是DOS格式,在Linux下面会有莫 ...
UVC之MJPEG流
背景
Platform: IMX6Q
OS: Linux-QT5
Kernel: 4.1.15
问题因项目需要,以前产品(IMX6Q,QT),客户觉得摄像头(OV5640)的效果不行,但以前的硬件的摄像头接口只支持DVP,现在很难找得到匹配的摄像头,且如果换摄像头,驱动调试等周期太长,所以打算使用USB摄像头。去深圳华强那边搜罗了一圈,找到了几个需要评估调试。大致参数:
1. YUYV(YUV 4:2:2 (YUYV))
discrete: 640x480: 1/30 1/25 1/20 1/15 1/10 1/5
discrete: 160x120: 1/30 1/25 1/20 1/15 1/10 1/5
discrete: 320x240: 1/30 1/25 1/20 1/15 1/10 1/5
discrete: 352x288: 1/ ...
GPIO控制问题
背景
Platform: IMX6
OS: Linux
Kernel: v4.1.35
问题用GPIO去控制一个外扩板的复位引脚,开始直接在用户态使用export去控制GPIO,但Kernel起来时的默认状态没法控制,Uboot是高电平,但到Kernel起来变成低电平,需修改进Kernel的默认电平
分析与解决改用leds-gpio的方式去控制。dts类似如下:
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_leds>;
reset-ctl {
gpios = <&gpio4 30 0>;
label = "reset_ctl";
default-state = "on";
...
Hexo管理博客文章
需求博客文章渐渐多了,为了方便整理文章
方案可以使用以下方案之一,也可以结合使用,VS Code集成有控制台,Hexo-Admin方便新建,实时预览效果
使用Visual Studio Code将Hexo整个目录导入到Visual Studio Code不仅方便整理文章,也方便自定义修改主题文件,及配置文件
使用Hexo-Admin插件
安装插件npm install —save hexo-admin
启动Hexo本地服务器hexo server -d
访问Admin管理页浏览器访问http://localhost:4000/admin可修改编辑文章,设置管理的账号,密码等,要发布还需做下面的设置
设置deploy调用脚本
注: 以Windows为例,Linux类似 4.1. 编辑Hexo配置文件_config.yml,在后面追加: admin:
deployCommand: 'hexo-pubish.bat' 4.2. 在配置文件同级目录新建hexo-pubish.bat文件,内容如下: hexo g -d
Shell实现菜单选择
需求命令太长,参数难得记,每次难得敲
方案主要有以下2种方法,都已验证
read 和 case 实现function menu ()
{
cat << EOF
----------------------------------------
|********* Product Model Menu **********|
----------------------------------------
`echo -e "\033[35m 1)NAS8531(default)\033[0m"`
`echo -e "\033[35m 2)NAS8533\033[0m"`
`echo -e "\033[35m 3)Menu\033[0m"`
`echo -e "\033[35m 4)Quit\033[0m"`
EOF
read -p "Please select product model:" input
case $input in
1)
PRODUCT_MODEL=8531
;;
2)
PRODUCT_MODEL=8533
;;
3)
c ...
RK3399添加Android新的产品
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
需求RK3399添加Android新的产品,来区别多个项目产品
解决Uboot添加如果Uboot配置或驱动有差异,可以考虑兼顾所有的,或者每种产品单独再对应一个defconfig
内核添加新建一个项目产品对应的dts,可参考已有的产品如果内核驱动配置有差异,可以考虑兼顾所有的,或者每种产品单独再对应一个defconfig
Android添加产品命令规则: Box 产品名中需带有“box”字样
新增文件夹device/rockchip/rk3399/rk3399_box_xxx, 基于 rk3399_box.mk 创建rk3399_box_xxx.mk,将 rk3399_box 目录下的所有文件拷贝至 rk3399_box_xxx 目录下,或者参考自己已有的一个产品 cd device/rockchip/rk3399
mkdir rk3399_box_xxx
cp rk3399_box.mk ./rk3399_box_xxx.mk
cp rk3399_box/* rk33 ...
Android 7.1 去掉桌面上的谷歌搜索框
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
需求去掉桌面上的谷歌搜索框
解决diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 3b5cd02..7e20bf8 100755
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1315,6 +1315,7 @@ public class Launcher extends Activity
mWorkspace = (Workspace) mDragLayer.findViewById(R.id.workspace);
mQsbContainer = mDragLayer.findViewById(mDeviceProfile.isVerticalBa ...
POE双网口问题
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
Switch Phy: ksz8463
问题单独用POE供电,网络不通
分析双网口设计:一个为”进”(机器默认绑定的active Phy),一个为”出”。硬件设计:设计在”出”的网口上。POE要设计在”进”的网口上,机器的网络才能正常,所以需要硬件交换POE的设计,或者软件交换机器的active Phy追踪代码:drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c文件中的stmmac_mdio_register函数:默认bind到MAC的phy(plat->phy_addr)是最先找到的phy,伪代码:
for(addr = 0; addr < PHY_MAX_ADDR; addr++) {
struct phy_device *phydev = new_bus->phy_map[addr];
if(phydev) {
//....
...