基于ext4文件系统实现在用户程序空间修改kernel命令行参数

前言

由于项目开发的需求,需要实现在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
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值