QNX ----IMX6UL移植NAND FLASH etfs文件系统
1、IMX6UL 配置了一块256M的nandflash,其原理图如下:
2、为了方便移植,到QNX官网下载IMX7的BSP中的NAND FLASH 源码,其源码支持nand4096 ,而本最小系统配置为nand2048,因此需要对其驱动进行相应修改。
(1)修改 BCH APBH GPMI的地址参数,因为IMX7的外设基本原理一样,其基地址和中断向量需要修改。
(2) 修改BCH参数,在原来的nand4096中 把一页化成四个部分,其结构如下:
而nand2048的一页只有2048 和64字节。所以需要进行修改,为了继承四个数据块,把数据划分为512+8字节 ECC 8字节。
3、修改源码中的参数
增加FLASH 配置
修改device_to_nfc 改成2048
void device_to_nfc(uint8_t *parsed_data, uint8_t *raw_data)
{
uint32_t dData_index, data_size, spare_size;
int i;
uint8_t bbi_backup = 0;
dData_index = 0;
data_size = 0;
spare_size = 0;
for (i = 0; i < (DATASIZE / BCH_SUBBLOCK_SIZE); i++) {
/* Copy data bytes */
memcpy((void *)(parsed_data + data_size), (void *)(raw_data + dData_index), BCH_SUBBLOCK_SIZE);
dData_index += BCH_SUBBLOCK_SIZE;
data_size += BCH_SUBBLOCK_SIZE;
/* Copy fs meta data */
memcpy((void *)(parsed_data + XXXXDEF + spare_size), (void *)(raw_data + dData_index), ETFS_META_SIZE_PER_SUBBLOCK);
dData_index += (ETFS_META_SIZE_PER_SUBBLOCK);
spare_size += (ETFS_META_SIZE_PER_SUBBLOCK);
}
// BBI swap
bbi_backup = parsed_data[DATASIZE]; //(BBI backup for move to DATA area)
parsed_data[DATASIZE] = parsed_data[XXXXDEF - (3 * ETFS_META_SIZE_PER_SUBBLOCK)];
parsed_data[XXXXDEF - (3 * ETFS_META_SIZE_PER_SUBBLOCK)] = bbi_backup;
}
把ECC 校验关闭。
编译后执行 fs-etfs-imx-micron -e -m /fs/etfs
通过df -h查看 文件系统已挂载上了。
PS:这里不把ECC关闭 会找不到器件ID ,实质上是ECC没有设置对。有哪位懂得如何设置吗?