前言
由于项目开发的需求,需要实现在android系统上通过apk应用程序来修改显示驱动程序以达到用户可以通过设置选项来修改显示驱动程序以适应不同尺寸、不同分辨率的TFT屏。
实现方案
软件:android4.4.3 硬件:i.Mx6+eMMC
1、APK根据用户的选择在/data/目录下生成一份相应的配置文件
2、u-boot启动时在cmd_fastboot中通过ext4文件系统挂载/data分区并读取解析配置文件的内容。
3、根据解析的配置文件修改自定义的命令行参数
4、在kernel的video driver中获取自定义的命令行参数选择相应的驱动程序。
技术细节
u-boot
关键头文件
#include <ext4fs.h>
#include <mmc.h>
#include <part.h>
关键函数
查找mmc设备号
**struct mmc *find_mmc_device(int dev_num)**
dev_num:设备号
初始化mmc设备
**int mmc_init(struct mmc *mmc)**
获取分区信息
**int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);**
dev_desc:设备描述信息
patr:分区号
info:返回的分区信息
加载分区
int ext4fs_probe(block_dev_desc_t *fs_dev_desc,disk_partition_t *fs_partition);
该函数加载成功后分区的根路径为'/'
读取文件内容
int ext4fs_read_file(const char *filename, void *buf, int offset, int len);
filename:文件名称
buf:读取出来的内容
offset:从偏移位置开始
len:读取的长度
向文件写内容
int ext4fs_write(const char *fname, unsigned char *buffer,unsigned long sizebytes);
filename:文件名称
buffer:待写入的内容
sizebytes:待写入的大小
卸载ext4文件系统
void ext4fs_close(void);
ext4文件系统打开文件后默认是没close的
示例用法:
find_mmc_device(xx);
mmc_init(xx);
get_partition_info(x,x,x);
ext4fs_probe(x,x);
size = ext4fs_open("/data/xxx.ini");
ext4_read_file("/data/xxx.ini",buf,0,size);
ext4fs_close();
kernel driver
获取u-boot的命令行参数
__steup(str,fn)
示例用法
static char *MyCmd;
int get_my_cmd(char *cmd)
{
MyCmd = cmd;
return 0;
}
__setup("zzw17hao=",get_my_cmd)
int void_init()
{
if( *MyCmd == '1' ){
xxxxx
fb800_init();
xxxxx
} else {
xxxx
fb1024_init();
xxxx
}
}