android开机自启动及系统APK
背景项目apk需要在升级之后自启动(新安装从未启动过),设备由UPS供电但从Android3.1开始,新安装从未启动过的app不能收到系统广播(启动完成,网络状态变化等)
解决方案:将app做成系统应用系统APK可以正常接收系统广播怎么将app做成系统应用?:
加入到Android源码编译 解压apk文件得到lib,将编译好的apk(xxx.apk)放到系统源码的packages/apps/xxx(xxx为自己创建)中,解压得到的lib文件夹也放到xxx文件夹中(没有源码) 添加Android.mk文件: include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional //不管是user 还是eng 版本都会编译此app
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS : ...
MIPI-LCD调试
LCD及DSI一些基本概念
水平消隐(HBlank):电子枪从左到右画出象素,它每次只能画一条扫描线,画下一条之前要先回到左边并做好画下一条扫描线的准备,这之间有一段时间叫做水平消隐。
垂直消隐(VBlank):在画完全部256条扫描线之后它又回到屏幕左上角准备下一次画屏幕(帧),这之间的一段时间就是垂直消隐。电子枪就是在不断的走‘之’字形。
行同步(HSYNC):行同步就是让电子枪控制器知道下面要开始新的一行像素
场同步(VSYNC:场同步就是告诉电子枪控制器下面要开始新的画面
数据使能(DE):在数据使能区是有效的色彩数据,不在使能范围内的都显示黑色。
前肩(Front Porch)/后肩 (Back Porch):行同步或场同步信号发出后,视频数据不能立即使能,要留出电子枪回扫的时间。以行扫描为例,从HSYNC结束到DE开始的区间成为行扫描的后肩(绿色区域),从DE结束到HSYNC开始称为前肩(紫色区域)。同样对于场扫面也可以由类似的定义
像素时钟(Pixel clock)
带宽
H-total = HorizontalActive + HorizontalFrontPorc ...
UVC相关
参考:The Linux USB Video Class (UVC) driverlibrary and sample to access to UVC web camera on non-rooted Android device
《Universal Serial Bus Device Class Definition for Video Devices: H.264 Payload》
Gstreamer测试UVC设备为 /dev/video1
gst-launch-1.0 --gst-debug-level=3 imxv4l2src device=/dev/video1 ! video/x-raw,format=YUY2,width=640,height=480,framerate=15/1 ! imxvideoconvert_g2d ! imxvideoconvert_ipu ! vpuenc_h264 ! rtph264pay pt=102 ! application/x-rtp ! udpsink host=192.168.1.13 port=5004
gst-la ...
Buildroot相关
配置外部编译器make menuconfig
Target options --->
Target Architecture (ARM (little endian)) --->
Target Architecture Variant (cortex-A7) --->
Target ABI (EABI) --->
Floating point strategy (Soft float) --->
Toolchain --->
Toolchain type (External toolchain) --->
Toolchain (Custom toolchain) --->
Toolchain origin (Pre- ...
Hisi视频相关
环境
Platform: Hi3516DV100
Kernel: v3.4
Hisi视频流程VI -> VPSS -> CHN -> VENCcat /proc/vpss ,详见官方文档proc调试
Hisi的90°旋转:https://blog.csdn.net/wangweiqiang1325/article/details/75455395
方式:
在VI采集时旋转,但有很多限制条件,详情见MPP文档
在VPSS通道旋转,HI_MPI_VPSS_SetRotate
采用在VPSS通道旋转:
vpss的grp(VPSS_GRP_ATTR_S)和 VPSS的CHN MODE(VPSS_CHN_MODE_S)里面的宽高,都设置为1280x720,旋转之前的默认宽高
vpss ch需要设置图像格式为非压缩(很重要!!):stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE;
设置vpss的通道旋转90度:HI_MPI_VPSS_SetRotate
check下VPSS CHN OUTPUT RESOLUTION里面的 ...
VPS部署Hexo
本地Hexo部分安装Node.js
Windows直接下载安装最新版
Ubuntu16.04安装最新版Nodejs :https://github.com/nodesource/distributions#rpm curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
安装Git下载安装最新版安装Hexosudo npm install -g hexo生成本地静态网站
进入要创建网页文件夹 hexo init
更换主题 cd themes git clone 需要下载的主题地址
配置主题 具体见主题
VPS部分安装配置Git创建git用户adduser git
添加root权限chmod 740 /etc/sudoers
vim /etc/sudoers
找到以下内容
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在下面添加一行git ...
Linux应用层I2C操作
背景:项目需求,需检测是否有camera sensor(CHIP_ADDR:0x6C>>1),通过I2C读取sensor的CHIP ID(CHIP_ID_H:0x300A, CHIP_ID_L:0x300B)为0x27 0x70
应用层I2C操作: unsigned char rddata[2]={0};
unsigned char rdaddr0[2] = {0x30, 0x0A}; //CHIP_ID_H 0x27
unsigned char rdaddr1[2] = {0x30, 0x0B}; //CHIP_ID_L 0x70
int fd =open(CHIP, O_RDWR);
if (fd< 0) {
printf("open"CHIP"failed\n");
return -1; ...
V4L2采集视频
V4L2 API:https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/v4l2.html
视频采集流程V4L2视频采集的简化流程:
打开设备 -> 设置输入源 -> 设置视频帧格式 -> 设置帧率等参数 -> 申请BUF及映射 -> 启动流 -> 获取数据 -> 停止视频流 -> 关闭设备
其他一些细节就省略了,这里只记录V4L2相关的 ioctl 操作流程。
打开设备fd = open(v4l_device, O_RDWR, 0);
获取设备信息
VIDIOC_QUERYCAP
struct v4l2_capability cam_cap;
ret = ioctl(fd, VIDIOC_QUERYCAP, &cam_cap);
printf("Driver Name: %s\nCard Name: %s\nBus info: %s\nDriver Version: %u.%u.%u\n",
cam_cap.driver,
...
Ubuntu相关
ubuntu网络相关:【ubuntu 16.04】
/etc/network/interfaces增加
auto ens33
iface ens33 inet static
address 192.168.88.181
netmask 255.255.255.0
gateway 192.168.88.2
注: ens33为网卡名,具体要看自己的机器
修改/etc/NetworkManager/NetworkManager.conf ,将 managed 设置为 true
设置 /etc/resolvconf/resolv.conf.d/base,增加
nameserver xxx
nameserver xxx
注: 机器在重启后,真正读取dns 的配置是在 /etc/resolv.conf,/etc/resolv.conf 的数据来源于 /etc/resolvconf/resolv.conf.d/base
重启网络服务/etc/init.d/netXX restart
【ubuntu 18.04/20.04 Server】ubuntu18.04 server之后,启用 ...
Uboot增加UDP收发和广播功能
背景: 因项目需求,要在Uboot里面添加UDP通讯,广播功能,从主机获取一些参数配置(IP等)。Uboot没有TCP/IP协议栈,不支持TCP,只支持简单的网络协议,具体见/uboot_src/net/net.c
MAC问题网络通讯的前提是有区别的MAC地址
烧写自己的MAC地址到Uboot
使用唯一的SN或UUID生成(节约MAC地址资源, 适用于局域网内)使用加密芯片全球唯一的SN,然后转化为MAC地址,检查MAC是否非法(is_valid_ether_addr(&sn[2])),非法则使用随机MAC(eth_random_addr(ethaddr);)setenv("ethaddr", ethaddr);保存MAC地址到uboot环境变量
Uboot增加UDP广播收发功能:参考:https://segmentfault.com/a/1190000005273491
添加自定义的xx_udp.c和xx_udp.h根据需要实现以下几部分(/uboot_src/net/):
实现开始和发送函数void UdpStart(void)
{
...
Uboot添加自定义命令
在/uboot_src/common目录添加cmd_xxx.c文件,参考其他cmd.c文件,大致实现以下两部分
/*命令具体实现*/
static int do_check_sd(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
xxxx
}
/**/
U_BOOT_CMD(check_sd, 2, 1, do_check_sd,
"check tf/SD card.",
"[do_check_sd] "
);
注:U_BOOT_CMD(name,maxargs,repeatable,command,”usage”,”help”)
name:命令名,非字符串,但在U_BOOT_CMD中用“#”符号转化为字符串 maxargs:命令的最大参数个数 repeatable:是否自动重复(按Enter键是否会重复执行) command:该命令对应的响应函数指针 usage:简短的使用说明(字符串 ...
Ubuntu server18.04上搭建Gitlab(docker方式)
Ubuntu server18.04上搭建Gitlab(使用Docker)Ubuntu Server 18.04系统安装:下载官方镜像,使用rufus工具制作U盘安装盘按照官方文档安装,记得配上sshd
ubuntu18.04 server配置静态ip:请见https://notes.z-dd.online/2019/05/16/Ubuntu%E7%9B%B8%E5%85%B3/
安装docker及相关操作:详见https://notes.z-dd.online/2021/01/13/Docker%E7%9B%B8%E5%85%B3/
Install GitLab with Docker:https://docs.gitlab.com/ce/install/docker.html
运行gitlab-ee镜像(第一次执行会先下载镜像):
sudo docker run --detach \
--hostname gitlab-server \
--publish 443:443 --publish 80:80 --publish 2222:22 ...