[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