[U-Boot] [PATCH] fastboot: add support for writing raw MMC
Petr Kulhavy
brain at jikos.cz
Fri Oct 7 08:59:38 CEST 2016
On 07/10/16 01:57, Jaehoon Chung wrote:
> On 10/05/2016 10:38 PM, Petr Kulhavy wrote:
>> The current fastboot implementation is only able to flash partition images.
>> However sometimes it is needed to write the raw MMC, e.g. when storing the
>> U-boot environment image or SPL.
>>
>> This patch adds the possibility to write MMC as a block device using a
>> special target name composed of "lba:" followed by the block address.
>> The address can be in decimal or hexadecimal with the "0x" prefix.
>>
>> Signed-off-by: Petr Kulhavy <brain at jikos.cz>
>> ---
>> common/fb_mmc.c | 38 +++++++++++++++++++++++++++++++++++++-
>> doc/README.android-fastboot | 15 +++++++++++++++
>> 2 files changed, 52 insertions(+), 1 deletion(-)
>>
>> diff --git a/common/fb_mmc.c b/common/fb_mmc.c
>> index 81a3bd0..c4fe2ac 100644
>> --- a/common/fb_mmc.c
>> +++ b/common/fb_mmc.c
>> @@ -27,6 +27,9 @@
>> #define CONFIG_FASTBOOT_MBR_NAME "mbr"
>> #endif
>>
>> +#define FB_RAW_PREFIX "lba:"
>> +#define FB_RAW_PREFIX_LEN 4
>> +
>> struct fb_mmc_sparse {
>> struct blk_desc *dev_desc;
>> };
>> @@ -68,6 +71,29 @@ static lbaint_t fb_mmc_sparse_reserve(struct sparse_storage *info,
>> return blkcnt;
>> }
>>
>> +/*
>> + * attempt to interpret the partition name as raw LBA
>> + * on success return 1 and fill info
>> + * on failure (not a LBA matching name) return 0 (info undefined)
>> + */
>> +static int get_raw_part_info(const struct blk_desc *dev_desc, const char *name,
>> + disk_partition_t *info)
> Is it right about "const struct blk_desc ..."? Why use "const"?
This is a standard practice in C to make sure the function doesn't alter
*dev_desc and in the header to indicate which parameters are inputs
(read-only) and which outputs.
In fact this should be used all over the code, but in U-boot it's not
very strictly followed.
>> +{
>> + if (strlen(name) <= FB_RAW_PREFIX_LEN ||
>> + strncmp(name, FB_RAW_PREFIX, FB_RAW_PREFIX_LEN) != 0)
> strlen(name) was need to check?
To make sure there is at least one character after the ":", i.e. the
input is not just "lba:". Otherwise the simple_stroul() returns 0.
There still could be some non-numeric characters though, but that check
would be more complex and ideally done in simple_strtoul()
Regards
Petr
More information about the U-Boot
mailing list