[U-Boot] [PATCH] [UBI] UBI command support

Kyungmin Park kmpark at infradead.org
Wed Oct 22 02:56:16 CEST 2008


Dear Wolfgang,

On Tue, Oct 21, 2008 at 7:24 PM, Wolfgang Denk <wd at denx.de> wrote:
> Dear Kyungmin Park,
>
> In message <20081021091859.GA29306 at july> you wrote:
>> UBI command support
>>
>> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> ...
>> +++ b/common/cmd_ubi.c
>> @@ -0,0 +1,535 @@
>> +/*
>> + * Unsorted Block Image commands
>> + */
>> +
>> +#include <common.h>
>> +#include <command.h>
>
> GPL header missing.

Okay I added.

>
>> +/* board/\*\/ubi.c */
>
> What's the '\'s there?
>
>> +extern int ubi_board_scan(void);
>
> Please move the prototypes to some header file.
>
>> +/* drivers/mtd/ubi/build.c */
>> +extern struct ubi_device *ubi_devices[];

Moved to proper header files.

>> +
>> +/* Private own data */
>> +static struct ubi_device *ubi;
>> +static int ubi_initialized;
>> +
>> +static void ubi_dump_vol_info(const struct ubi_volume *vol)
>> +{
>> +     dbg_msg("volume information dump:");
>> +     dbg_msg("vol_id          %d", vol->vol_id);
>> +     dbg_msg("reserved_pebs   %d", vol->reserved_pebs);
>> +     dbg_msg("alignment       %d", vol->alignment);
>> +     dbg_msg("data_pad        %d", vol->data_pad);
>> +     dbg_msg("vol_type        %d", vol->vol_type);
>> +     dbg_msg("name_len        %d", vol->name_len);
>> +     dbg_msg("usable_leb_size %d", vol->usable_leb_size);
>> +     dbg_msg("used_ebs        %d", vol->used_ebs);
>> +     dbg_msg("used_bytes      %lld", vol->used_bytes);
>> +     dbg_msg("last_eb_bytes   %d", vol->last_eb_bytes);
>> +     dbg_msg("corrupted       %d", vol->corrupted);
>> +     dbg_msg("upd_marker      %d", vol->upd_marker);
>
> Please use the standard  debug()  macro.

It's not debug message, it's ubi msg. I fixed.

>
>> +static int ustrtoul(const char *cp, char **endp, unsigned int base)
>
> Maybe we should add this to some global place, like lib_generic ?

Move to lib_generic/vsprintf.c

>
>> +        unsigned long result = simple_strtoul(cp, endp, base);
>> +        switch (**endp) {
>> +        case 'G' :
>> +                result *= 1024;
>
> Please add a
>                /* fall through */
> comment to make clkear that it is intentional not to have a "break;"
> here.
>
>> +        case 'M':
>> +                result *= 1024;
>
> Ditto.

Did

>
>> +static int verify_mkvol_req(const struct ubi_device *ubi,
>> +                         const struct ubi_mkvol_req *req)
>> +{
> ...
>> +bad:
>> +     printf("bad volume creation request");
>> +//      ubi_dbg_dump_mkvol_req(req);
>> +     return err;
>
> No C++ comments, please. And please don;t add dead code either.

Yes I remove it

>
>> +     tbuf = vmalloc(tbuf_size);
>
> Why do we need new alloc() stuff?
>
>> +
>> +     vfree(tbuf);
>
> Ditto?

Use malloc & free.

>
>> +static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
>> +{
>> +     size_t size = 0;
>> +     ulong addr = 0;
>> +     int err = 0;
>> +
>> +     if (!ubi_initialized) {
>> +             err = ubi_board_scan();
>> +             if (err) {
>> +                     printf("ubi initialize error %d\n", err);
>
> "UBI init error" -- maybe we can decode the error number into some
> string?
>
>> +             /* E.g., create volume size type */
>> +             if (argc == 5) {
>> +                     if (strncmp(argv[4], "s", 1) == 0)
>> +                             dynamic = 0;
>> +                     else if (strncmp(argv[4], "d", 1) != 0) {
>> +                             printf("You give wrong type\n");
>
> "Incorrect type". It would also be helpful if the incorrect parameter
> gets printed, so the user sees what he passed.
>
>> +                             return 1;
>> +                     }
>> +                     argc--;
>> +             }
>> +             /* E.g., create volume size */
>> +             if (argc == 4) {
>> +                     err = parse_num(&size, argv[3]);
>> +                     if (err) {
>> +                             printf("You give correct size\n");
>
> "Incorrect size". Please also print incorrect argument value.
>
>> +     if (strncmp(argv[1], "write", 5) == 0) {
>> +             if (argc < 5) {
>> +                     printf("You give wrong parameters\n");
>
> Print usage message instead.
>
>> +             }
>> +
>> +             addr = simple_strtoul(argv[2], NULL, 16);
>> +             err = parse_num(&size, argv[4]);
>> +             if (err) {
>> +                     printf("You give wrong size\n");
>
> See above.
>
>> +                     if (err) {
>> +                             printf("You give wrong size\n");
>
> Ditto.
>
>> +     printf("Unknown UBI command or invalid number of arguments\n");
>
> Print usage message instead.
>

How to display usage?

Thank you,
Kyungmin Park


More information about the U-Boot mailing list