[PATCH 02/14] common: console: add log_dprint to print to file descriptor

Ahmad Fatoum a.fatoum at pengutronix.de
Thu Apr 15 08:43:33 BST 2021


Hello Sascha,

On 15.04.21 09:25, Sascha Hauer wrote:
> On Tue, Apr 13, 2021 at 12:34:50AM +0200, Ahmad Fatoum wrote:
>> It can be useful to dump the log into the file, e.g. when doing an
>> update from a USB flash drive with no serial peer attached. Board code
>> could use log_dprint to dump the log onto the drive. Add a function
>> to facilitate this.
>>
>> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
>> ---
>>  common/console_common.c | 15 +++++++++++++++
>>  include/printk.h        |  1 +
>>  2 files changed, 16 insertions(+)
>>
>> diff --git a/common/console_common.c b/common/console_common.c
>> index 3e0741572398..77ad4728fbfd 100644
>> --- a/common/console_common.c
>> +++ b/common/console_common.c
>> @@ -182,6 +182,21 @@ static int console_common_init(void)
>>  }
>>  device_initcall(console_common_init);
>>  
>> +int log_dprint(int fd)
> 
> This function isn't used anywhere in this series, I would prefer to
> merge it along with a user.

The user code won't be upstreamed. It's a vendor-specific update
mechanism. It's still a useful function to have. Recovery via USB
stick seems to be not uncommon (see protonic board code for example)
and boards implementing this would benefit from being able to write
to log and then dump the log onto the USB stick for evaluation.

> Is printing to an opened filedescriptor the most useful semantics of
> this function? This only seems to make sense when other things should be
> written to the file as well, otherwise I would assume to pass a path to
> this function which then handles open/close also.


Hmm, yes. I can make it write to a supplied filename instead.

> 
> Sascha
> 
>> +{
>> +	struct log_entry *log;
>> +	int nbytes = 0;
>> +
>> +	list_for_each_entry(log, &barebox_logbuf, list) {
>> +		int ret = dputs(fd, log->msg);
>> +		if (ret < 0)
>> +			return ret;
>> +		nbytes += ret;
>> +	}
>> +
>> +	return nbytes;
>> +}
>> +
>>  void log_print(unsigned flags, unsigned levels)
>>  {
>>  	struct log_entry *log;
>> diff --git a/include/printk.h b/include/printk.h
>> index 94a25ec9ebac..798acfdbf188 100644
>> --- a/include/printk.h
>> +++ b/include/printk.h
>> @@ -141,6 +141,7 @@ extern void log_clean(unsigned int limit);
>>  #define BAREBOX_LOG_PRINT_ALERT		BIT(1)
>>  #define BAREBOX_LOG_PRINT_EMERG		BIT(0)
>>  
>> +int log_dprint(int fd);
>>  void log_print(unsigned flags, unsigned levels);
>>  
>>  struct va_format {
>> -- 
>> 2.29.2
>>
>>
>> _______________________________________________
>> barebox mailing list
>> barebox at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/barebox
>>
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list