Android系统开发常识

Android配置:
内核文件目录:
init/:内核初始化代码,其中main.c文件中的start_kernel函数是内核引导启动后的第一个函数。
arch/: 体系结构相关代码
block/: 块设备的通用函数
crypto/: 常用加密和散列算法(如AES、SHA等)
drivers/: 设备驱动程序,每个子目录对应一类设备系统,如drivers/input/对应输入子系统
fs: Linux支持的文件系统代码,每个子目录对应一类文件系统
include/:内核头文件,包含基本头文件、各种驱动和体系框架的头文件
ipc/:进程间通信的代码
kernel/:内核管理的核心代码,与处理器相关的代码位于arch/ * /kernel/目录下
lib/:内核常用的库函数代码
mm/:内存管理代码,预处理器相关的代码位于arch/ * /mm/目录下
net/:网络支持代码
security/:安全、密钥相关代码
sound/:音频设备的驱动驱动程序
usr/:该目录中的代码为内核尚未完全启动时执行用户空间代码提供了支持(initrd镜像)
Documentation/:内核相关文档
scripts/:内核相关脚本

工具:
linux常用命令:
Ctrl + Alt + t:打开终端。
nautilus . :    提供文件的图形化显示。
mkdir -p :在下一级目录创建文件夹
touch :文件不存在创建空白文件,文件存在则改变文件时间。
echo:终端中显示字符,(echo "xxx" > abc 将xxx写入abc文件中)
gedit + 文件名: 用gedit文本编辑器打开文件,后面加"&"可让终端在后台运行。
cp -rvf + 文件名 :复制
rm -rvf + 文件名 :删除
sudo shutdown -r now    :重启
sudo shutdown -h now    :关机
sudo passwd :设置密码
su :切换超级用户
sudo chmod 0777 + 文件名:修改文件权限
sudo chown xx:xx + 文件名:修改文件所属的群、组
man :获取帮助,例如查看函数用法等。
adb常用命令:
reboot loader 让机器直接进入升级模式。
1、查看所有已经连接上的设备
adb devices :如果有多个设备连接到电脑,可以通过 adb -s DEVICE_ID 来指定用哪一个
2、挂载system分区(当然需要设备支持)
adb remount
3、安装与卸载应用
adb install <apk文件路径>
adb install -r <apk文件路径>     通过install命令来安装apk文件,-r参数可以重新安装某个应用并保留应用数据
#举例
adb install -r ~/chrome.apk
卸载应用:
adb uninstall <软件名>
adb uninstall -k <软件名>         如果加 -k 参数,为卸载软件但是保留配置和缓存文件
#举例
adb uninstall com.android.chrome
4、启动一个Activity
adb shell am start 包名/.类名
adb shell am start 包名/类的全名
5、登录设备shell
adb shell  --这个命令将登录设备的shell.
adb shell <command命令>      后面加<command命令>将是直接运行设备命令, 相当于执行远程命令
从电脑上发送文件到设备:
adb remount     ## remount '/system'分区 as read-write
adb push <本地路径> <远程路径> :用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)
adb pull <远程路径> <本地路径> :从设备上下载文件到电脑。用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑
adb help:显示帮助信息(包括各种命令用法与含义) 
6、利用无线来查看adb shell
> adb tcpip 5555
连接:
> adb connect IP:5555
7、模拟按键
 > adb shell input keyevent "value"
部分常见按键对应值:
Key  | Constant Value
Back 4
Power 26
Menu 82
Home 3
Search 84
方向键:
上 19202122
确认(类似单击):23
8、adb shell下查看系统盘符
 > adb shell df
9、adb shell下挂载系统
> adb shell
> busybox mount -o remount,rw /system
10、adb shell 下移除USB设备
> adb shell
> vdc unshare /mnt/sdcard ums
11、adb shell 下查看内核信息
> cat /proc/kmsg &
12、查看build配置的值(以heap为例)
> adb shell getprop | grep heap
13、通过sendevent 模拟按键以及鼠标
直接用input实现:
> adb shell input keyevent 3
> adb shell input tap 250 250
> adb shell input swipe 250 250 300 300
14、查看屏幕显示的fps
开启系统属性:debug.sf.fps=1
然后直接logcat -s SurfaceFlinger -v time
(看SurfaceFlinger里面打印出来时多少)
15、查看当前运行程序栈
> dumpsys window windows | busybox grep "Window #" 
16、查看当前设备DDR运行频率
> cat /proc/clocks | busybox grep "ddr"
17:ADB logcat过滤
adb logcat -s TAG_NAME
adb logcat -s TAG_NAME_1 TAG_NAME_2
adb logcat “*:PRIORITY”
adb logcat -s TAG_NAME:PRIORITY
adb logcat -s TAG_NAME_1:PRIORITY_1 TAG_NAME_2:PRIORITY
优先级(PRIORITY)分为以下几种:
V – Verbose
D – Debug
I – Info
W – Warning
E – Error
F – Fatal
S – Silent
范例:
> adb logcat *:E 查看异常信息
> adb logcat -s "TAG"    过滤TAG
18:查看设备是否拥有su权限(4.2及之前版本)
> adb shell
> ps
# 会列出系统进程
# 选一个u开头的 表示普通程序
> su u0_a8
#切换到u0_a8下 #号变 >
> su
#如果可以执行,>号为#号,则表示有su权限,如果提示权限问题,就没有su权限
19:查看应用引用
adb 查看Android应用所有引用
> adb shell
> ps  (查看PID号)
> cd /proc/PID号/fd
> busybox ls -l
也将文件拷贝出来
> cat xxx > /sdcard/xxx
20:获取运行内存/CPU信息
> adb shell
> cat /proc/meminfo
> cat /proc/cpuinfo
21:抓取Logcat信息及kmsg信息
 # cat proc/kmsg >/data/kmsg.txt & 
 # logcat -v time >/data/logcat.txt &
22:查看Android(手机\平板\开发板等)设备信息
> adb shell dumpsys package > package.xml
       (此命令可显示手机(平板)可供应用查询到的library和feature)
23、输出所有已经安装的应用
> adb shell pm list packages -f 
24、查看预安apk
> adb shell pm list packages -3
25:清除logcat缓冲区
(用这个命令来清除一些重复出现的过时的日志)
> adb logcat -c
26、截取屏幕图片
截图直接保存到电脑
$ adb shell screencap -p | sed 's/\r$//' > screen.png
执行adb shell 将\n转换\r\n, 因此需要用sed删除多余的\r
如果直接当命令用还可以用 alias 包裝装起來
$ alias and-screencap="adb shell screencap -p | sed 's/\r$//'"
$ and-screencap > screen.png 
以后就可以方便的用and-screencap > 直接将截图保存到电脑上了
27.目前认为最牛的adb命令:录制屏幕(android5.1后支持)
adb shell screenrecord /sdcard/demo.mp4
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4 限制录制时间10s,默认录制180s.
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4 说明:录制视频,分辨率为1280*720,如果不指定默认使用手机的分辨率,
为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4 指定视频的比特率 参数: --bit-rate
说明:指定视频的比特率为6Mbps,如果不指定,默认为4Mbps. 你可以增加比特率以提高视频质量或为了让文件更小而降低比特率

adb shell screenrecord --time-limit 10 --verbose /sdcard/demo.mp4 在命令行显示log 参数: --verbose
Main display is 1080x1920 @60.00fps (orientation=0)
Configuring recorder for 1080x1920 video at 4.00Mbps
Content area is 1080x1920 at offset x=0 y=0
Time limit reached
Encoder stopping; recorded 96 frames in 10 seconds
Stopping encoder and muxer
Executing: /system/bin/am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/demo.mp4
Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=file:///sdcard/demo.mp4 }
Broadcast completed: result=0

adb shell screenrecord --help 查看帮助命令 参数: --help

串口调试工具:
windows下使用SecureCRT
1,安装SecureCRT
2,安装USB转串口工具驱动
3,设置和使用SecureCRT


Windows 下登陆linux服务器进行开发,让开发无平台界限 

前提条件
1.已经按照linux操作系统(建议使用最广泛的ubuntu 12.04)的服务器,能支持ssh远程登陆;
2.下载SecureCRT,是一款支持SSH(SSH1和SSH2)的终端仿真程序;
操作步骤,免安装点击运行:
1.点击运行,弹出连接配置对话框
协议:支持的协议名称   ssh1 ssh2 都是ssh协议选项,根据远程服务器安装的ssh版本选择ssh即可,serial  串口协议 如果选择这个连接的时候当做串口输出串口来用,其他几项不做解释,自行了解;
主机名:就是你所要通过ssh登陆的远程服务器的IP地址,要确定你是否能正常登陆该服务器你可以在window下的CMD命令 ping一下看是否能ping通;
端口号:远程服务器提供的连接端口,采用默认的值即可,一般不会出现端口冲突;
用户名:你登陆远程服务器的时候,要选择的登陆哪个用户;
然后勾选保存,这样你下次再次这个登陆用户的时候不用再次配置,直接点击即可;
配置完进入下一步之后会弹出输入密码框,输入该用户对应的密码,选择保存密码下次就不用再输入密码了;
2.连上服务器之后,可以发觉默认的设置与我们在ubuntu上开发界面有些不和谐,没关系,我们进一步设置让它接近我们linux的风格;选择 菜单栏的  “选项”打开 绘画选项一栏:
No1:选中终端--仿真一项,将仿真(T)配置为linux,为了让我们能够尽可能看到更多的编译或者代码信息,将缓冲区设置为最大容量 逻辑行和逻辑列都设置最大200,回滚设置为128000,这样就不用担心编译的时候缓冲区不够导致前面的信息被覆盖啦;
No2:选中终端--外观选项,将当前颜色方案设置为 “白-黑”,将“字符编码”设置为UTF-8(支持中文),这样就不会看到中文乱码了
其他配置可以根据自己爱好进行,看,现在的界面基本就和在ubuntu 上的终端无差别了;
3.文本和文件夹操作
在securecrt上要操作文件夹需要打开其自带的secureFX,默认在连接界面的快速操作栏的最后一项,点击连接将会进入该用户的用户目录,进入到需要操作的目录之后可以从你的windows 拷贝文件到远程服务器的对应目录,也可以从远程服务器点击右键下载,然后在弹出来的文件夹选择框选择你要放到哪个目录;  

Linux下使用ckermit:
1,安装ckermit
2,配置.kermrc文件
3,使用sudo kermit -c 命令连接

在Linux下常用有这两种串口查看工具:C-Kermit和minicom
个人强烈推荐C-kermit,配置简单,使用方便,实在是调试利器!
一,首先是安装C-kermit
sudo apt-get install ckermit
二,然后进行C-kermit的配置
在用户目录下新建一个名为  .kermrc的文件,并输入配置(附件为我使用的.kermrc配置)
set line /dev/ttyUSB0
复制代码其中有两个参数比较重要
set speed 115200:设置波特率为115200
set line /dev/ttyUSB0:设置连接的端口为USB转串口0(查看usb转串口的使用情况可以用lsusb命令),如果是串口就是ttyS0
三,连接开发板的串口后,打开kermit,输入
sudo kermit -c

.kermrc文件配置范例:
{
    set line /dev/ttyUSB0
    #set speed 57600
    set speed 115200
    #set speed 921600
    set carrier-watch off
    set handshake none
    set flow-control none
    robust
    set file type bin
    set file name lit
    set rec pack 1000
    set send pack 1000
    set window 5
}

常用目录:arch/arm/boot/dts/目录,于芯片相关,dts芯片平台硬件驱动相关的配置。
drivers目录:linux的大部分代码都位于这个目录,基本所有的驱动文件都位于这个目录,工程中需要重点关注的cpufreq(CPU频率)、mtd()、gpio、
regulator(电源管理)、rtc(实时时钟)input、media、net、usb、power、misc、video等目录。
include目录:头文件
net:网络代码部分,调试部分网络驱动用到。
sound/soc目录:音频相关的驱动,按照Asoc的音频架构操作。
scripts:一些自行编写脚本文件可以这运行。


配置内核(.config)的三种方法:
1、make menuconfig
2、直接修改.config  gedit .config命令,然后直接修改对应的选项
3、使用make + 预置的配置文件

rk3288_v1.6 SDK:
u-boot配置文件:rk3288_defconfig
内核配置文件:rockchip_defconfig
android编译:source build/envensetup.sh

GPIO系统调用:
位于include/linux/gpio.h
static inline int gpio_request(unsigned gpio, const char *label)  //申请GPIO
static inline void gpio_set_value(unsigned int gpio, int value) //设置GPIO电平
static inline int gpio_get_value(unsigned int gpio)         //获取gpio电平
static inline int gpio_direction_output(ungined gpio, int value)    //设置gpio为输出,并设置电平
static inline int gpio_direction_input(unsigned gpio)       //设置GPIO为输入

rk3288 codec配置:
音量:/sys/kernel/debug/asoc/RK_ES8323/ES8323.2-0011

驱动模块:
//内核驱动必须的三个头文件 
#include <linux/module.h> 
#include <linux/kernel.h>
#include <linux/init.h>

static int __init test_init(init)
{
    printk("%s: %s",__file__, __funcation__); //在内核中打印出该函数所在的文件路径和函数名称
    return 0;
}

static void __exit test_exit(void)
{
    printk("%s: %s",__file__, __funcation__);   
}


MODULE_LICENSE("GPL"); //协议

module_init(test_init); //加载:入口
module_exit(test_exit); //卸载:出口

vim快捷键:

添加临时行号::se number 或 :set nu
取消行号::set nonu
撤销上一步:普通模式  u
被编辑文件中导入文件::r 文件名
被编辑文件中导入命令结果::r !命令

Vim中执行命令::!命令
自定义快捷键::map 快捷键 触发命令 
粘贴模式::se paste 然后再进入插入模式,可以避免粘贴后格式错乱;H ML 跳到屏幕的顶上中间下方 
w 跳到下一个单词的开始
e 跳到单词的结束
b 向后跳
gg 跳到文件的开始 
G 跳到文件的结束 
10gg 或10G 跳到第10行 
ta 跳到下一个a 前面
fa 跳到下一个a
Shift+3高亮显示所有当前选中的字符串
编辑模式下:
Ctrl+p/ n 自动补全:会在缓冲区以及当前文件所包含的头文件中查找光标前关键字开始的单词;
注释多行:
Ctrl+v进入可视界面,移动光标,标记要注释的行,然后shift+I,esc 退出,则操作完成;
或使用替换法:
:s/^/#                  替换行首为#
:s/n1,n2s/^/#           替换n1到n2行行首为#
:.,n2s/^/#              替换当前行到n2行行首为#
:%s/^/#                 用#注释所有行

实质:

:s/word1/word2        word1被word2替换
:s/word1/word2/g             全文word1被word2替换
:n1,n2s/word1/word2              n1到n2行 word1被word2替换
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值