LINUX.ORG.RU

Сообщения amaora

 

Два сегмента по одному адресу

Форум — Development

Такой скрипт,

MEMORY
{
	RAM (rwx)	: ORIGIN = 0x20000000, LENGTH = 6K
	FLASH (rx)	: ORIGIN = 0x08000000, LENGTH = 16K
}

SECTIONS
{
	.isr : ALIGN(4)
	{
		ld_sisr = . ;

		KEEP(*(.isr))

	} > RAM

	.text : ALIGN(4)
	{
		*(.text)
		*(.text.*)
		*(.rodata)
		*(.rodata.*)
 
		. = ALIGN(4);
		ld_etext = . ;

	} > RAM

	...

и такой код,

.syntax unified
.cpu cortex-m3
.thumb

.section .isr

	.word 0
	.word isr_reset
	.word 0
	.word 0
	.word 0
	.word 0
	.word 0
	.word 0
	.word 0
	.word 0

.section .text

.global isr_reset

isr_reset:

	bl motor_entry

а результат,

$ make dump
  ODUMP  bldc.elf

bldc.elf:     file format elf32-littlearm


Disassembly of section .isr:

20000000 <ld_sisr>:
20000000:       00000000        andeq   r0, r0, r0
20000004:       20000000        andcs   r0, r0, r0
        ...

Disassembly of section .text:

20000000 <isr_reset>:
20000000:       f000 f800       bl      20000004 <motor_entry>

20000004 <motor_entry>:
20000004:       e7fe            b.n     20000004 <motor_entry>
        ...

почему .text кладется в начало RAM, если там уже расположена .isr? Судя по манам такого быть не должно, и не происходит с другими секциями.

 ,

amaora
()

hotplug в gentoo

Форум — General

Непонятно.

/etc/init.d/udev

133         if [ -e /proc/sys/kernel/hotplug ]; then
134                 echo "" >/proc/sys/kernel/hotplug
135         fi

Если вручную записать туда /sbin/hotplug то начинает работать. Но как должно быть?

 , ,

amaora
()

[gcc][avr] Оптимизация делает хуже

Форум — Development

Наверно ещё рано идти в багтрекер, возникает вопрос зачем это сделано и нельзя ли отключить.

u16_t u_mul_u16_u88_rough(u16_t x, u16_t m)
{
	union { u16_t s; u8_t b[2]; }	um;

	u16_t		r = 0;
	u8_t		i = 1;

	um.s = m;

	do {
		if (um.b[0] & i) {

			r += x;
		}

		r >>= 1;
		i <<= 1;
	}
	while (i != 0);

	i = 1;

	do {
		if (um.b[1] & i) {

			r += x;
		}

		x <<= 1;
		i <<= 1;
	}
	while (i != 0);

	return r;
}

$ avr-gcc -c util.c -Wall -pipe -std=c99 -Os -fconserve-stack -fno-strict-aliasing -mmcu=atmega16 -S

.global	u_mul_u16_u88_rough
	.type	u_mul_u16_u88_rough, @function
u_mul_u16_u88_rough:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
	ldi r20,lo8(8)
	ldi r21,hi8(8)
	ldi r30,lo8(1)
	ldi r18,lo8(0)
	ldi r19,hi8(0)
.L29:
	mov r31,r30
	and r31,r22
	breq .L28
	add r18,r24
	adc r19,r25
.L28:
	lsr r19
	ror r18
	lsl r30
	subi r20,lo8(-(-1))
	sbci r21,hi8(-(-1))
	brne .L29
	ldi r20,lo8(8)
	ldi r21,hi8(8)
	ldi r22,lo8(1)
.L32:
	mov r30,r22
	and r30,r23
	breq .L30
	add r18,r24
	adc r19,r25
.L30:
	lsl r22
	subi r20,lo8(-(-1))
	sbci r21,hi8(-(-1))
	breq .L31
	lsl r24
	rol r25
	rjmp .L32
.L31:
	movw r24,r18
/* epilogue start */
	ret

Добавляется новый счетчик цикла в регистрах r20/r21 который, только не ясно зачем. На x86 тоже происходит что-то похожее. Но зачем? инструкция сдвига или сложения уже ставит флаги и следующей инструкцией уже может быть условный переход.

Если передать i как параметр функции то первый цикл становиться таким.

	ldi r18,lo8(0)
	ldi r19,hi8(0)
.L29:
	mov r21,r20
	and r21,r22
	breq .L28
	add r18,r24
	adc r19,r25
.L28:
	lsr r19
	ror r18
	lsl r20
	brne .L29

Вот так и надо, было.

 ,

amaora
()

music request 2

Форум — Talks

Фильтрация по тегам не достаточна точна.

http://www.jamendo.com/ru/track/348646

amaora
()

[laptop_mode][reiserfs] Частая запись

Форум — General

Работает rtorrent, пишет на диск, не делает fsync, смотрел strace. Диск смонтирован с параметром commit=480 (хотя ман говорит что для reiserfs нет такого). Включен laptop_mode,

init_laptop() {
        echo 5 > /proc/sys/vm/laptop_mode
        echo 48000 > /proc/sys/vm/dirty_expire_centisecs
        echo 48000 > /proc/sys/vm/dirty_writeback_centisecs
        echo 20 > /proc/sys/vm/dirty_ratio
        echo 1 > /proc/sys/vm/dirty_background_ratio
        blockdev --setfra 16384 /dev/sda
}

Результат, каждые 4-5 секунд дергается диск. Как это можно подебажить? чтобы понять причину.

Скорость прибывания данных ~200Кб/сек, не так быстро чтобы записывать каждые 5 секунд. Память 2G, почти вся свободна.

 

amaora
()

[spinlock, atomic] без готовых инструкций

Форум — Development

Как реализовать для примера атомарный инкремент имея только инструкции чтения сложения и записи? Кажется есть какой-то метод, как-то вот так, точно не помню, найти не могу (не знаю как называется),

#define MAX_THREAD		(2)

#define RET_OK			(0)
#define RET_FAIL		(-1)

struct atvar {
	int	val;
	int	tab[MAX_THREAD];
};

int at_init(struct atvar *v)
{
	int	i;

	v->val = 0;

	for (i = 0; i < MAX_THREAD; ++i)
		v->tab[i] = 0;
}

int at_inc(struct atvar *v, int tid)
{
	int	i, rval;

	for (i = 0; i < MAX_THREAD; ++i) {
		if (v->tab[i])
			return RET_FAIL;
	}

	v->tab[tid] = 1;

	for (i = 0; i < MAX_THREAD; ++i) {
		if (i != tid && v->tab[i]) {
			v->tab[tid] = 0;
			return RET_FAIL;
		}
	}
	
	rval = v->val;
	v->val = rval + 1;

	v->tab[tid] = 0;
	return RET_OK;
}

И ещё возникает вопрос как анализировать правильность подобных алгоритмов.

amaora
()

[eeepc1215p] backlight после рестрата

Форум — Desktop

Если поменять на 0% и сделать рестарт, то это значение остается судя по видимой яркости и току потребления, но ядро принимает его за 100% и каким-то образом продолжает регулировку в новом диапазоне.

Z    0%   10%  20%  30%  40%  50%  60%  70%  80%  90%  100%
-----*----*----*----*----*----*----*----*----*----*----*
0%   100%
-----*

Можно сделать ещё темнее и сберечь ~0.2W. Работает одинаково хорошо через /sys/class, xbacklight, Fn+F5/F6. Но что это за багофича? И как исправить?

CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y

По каким словам искать?

amaora
()

Измерение энергопотребления

Галерея — Скриншоты

eee pc 1215p, 4400 mAh, значения тока батареи в разных условиях, измерения внутри одного раздела проводились без изменения чего-либо за исключением темы раздела. Заряд батареи был в пределах 98% - 85%. M — мат.ожидание, S — среднеквадратическое отклонение. Выборка ~60 значений с частотой 1Гц. Через слеш вторая попытка.

uvcvideo, module is in service, idle			M=562.698 S=8.79147 / M=561.692 S=11.5065
uvcvideo, module is in service, mplayer			M=762.167 S=6.7627
uvcvideo, module is out of service			M=547.083 S=11.4924 / M=549.748 S=6.08652
backlight 0%						M=551.371 S=13.7011
backlight 100%						M=618.506 S=25.0102 / M=621.689 S=9.46629
backlight off						M=416.784 S=39.8267
hdparm, idle						M=569.896 S=11.5631
hdparm, active (read)					M=893.414 S=5.74467
hdparm, standby						M=528.897 S=28.6974
hdparm, sleep						M=531.565 S=27.5757
cpu, powersave, idle					M=562.083 S=21.5471
cpu, powersave, 100%					M=833.286 S=0.808122
cpu, performance, idle					M=540.364 S=3.86764
cpu, performance, 100%					M=994.796 S=1.61599
audio, powersave					M=558.075 S=24.0878
audio, idle						M=546.753 S=5.48707
audio, active (speaker 32%)				M=737.714 S=4.69476
audio, active (speaker 0%)				M=736.681 S=1.55886

Точности во многих местах маловато, да. Измрений для wifi не будет, драйвер не обнаружен. Было бы интересно увидеть подобное для других устройств.

amaora
()

Способы сделать suspend to disk

Форум — Desktop

Вот стало надобно это сконфирурить, но возникают вопросы, зачем столько
способов сделать suspend и какой и чем лучше/хуже, s2ram/standby не
интересуют, только на диск.

1. echo disk > /sys/power/state + cmdline=«resume=/dev/<yourdev>»
2. s2disk + initramfs + resume
3. tuxonice, какие-то сторонние патчи, но не понятно зачем

Попробовал первый способ, похоже там даже есть сжатие, сначала опасался,
что это будет преимуществом user space методов. Что используете и почему?

Спасибо.

amaora
()

[C] Чтение файлов без блокировки

Форум — Development

Такое бывает? При условии, что использовать можно только libc и SDL. Вносить треды и их синхронизировать мне не кажется хорошей идеей.

 

amaora
()

[initramfs][diskless][busybox] Не работает

Форум — General

Пытаюсь сделать бездисковую систему с busybox. Предвижу, что об этом где-то писано но я пропустил.

1. Не работает init, точнее не читает /etc/inittab

$ pwd
/home/amaora/devel/imx233/build/rootfs
$ ls -l
...
lrwxrwxrwx 1 amaora users   11 Aug 20 18:46 init -> bin/busybox

$ cat etc/inittab 
# /etc/inittab
#

ttyAM0::sysinit:/etc/rc.init
ttyAM0::shutdown:/etc/rc.clean

tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2

ttyAM0::respawn:/sbin/getty -L ttyAM0 115200 vt100

Результат,

...
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
Freeing init memory: 852K
can't run '/etc/init.d/rcS': No such file or directory
can't open /dev/tty3: No such file or directory
can't open /dev/tty4: No such file or directory

can't open /dev/tty2: No such file or directory
can't open /dev/tty3: No such file or directory
can't open /dev/tty4: No such file or directory

судя по исходникам это дефолтная конфигурация используемая в случае неудачного чтения конфига.

2. Добавил в cmdline ядра init=/bin/sh

...
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
Freeing init memory: 856K
can't run '/etcmmc0: new high speed SD card at address 0002
mmcblk0: mmc0:0002 00000 954 MiB 
 mmcblk0: p1 p2

(none) login: 
(none) login: ls
Password: 

(none) login: root
Password: 

(none) login: no
Password: 

(none) login:

?

 ,

amaora
()

[gentoo] сломался ppp

Форум — General

Похоже после перехода на openrc,

~ /etc/conf.d/net

link_ppp1=«/dev/ttyACM0»
username_ppp1=«mobile»
password_ppp1=«internet»

pppd_ppp1=(
   «defaultroute»
   «usepeerdns»
   «noipdefault»
   «ipcp-accept-local»
   «ipcp-accept-remote»
   noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp
)

chat_ppp1=(
   'TIMEOUT' '45'
   'ABORT' 'BUSY'
   'ABORT' 'NO CARRIER'
   'ABORT' 'ERROR'
   " 'ATZ'
   'OK' 'AT+CRM=i1;&C0'
   'OK' 'ATDT#777'
   'CONNECT' "
)

# /etc/init.d/net.ppp1 restart
* Bringing up interface ppp1
* Starting pppd in ppp1 ... [ ok ]
* Backgrounding ...
* WARNING: net.ppp1 has started, but is inactive

# cat /var/log/ppp-connect-errors
sh: -c: line 0: syntax error near unexpected token `;&'
sh: -c: line 0: `/usr/sbin/chat -e -E -v TIMEOUT 45 ABORT BUSY ABORT NO CARRIER ABORT ERROR ATZ OK AT+CRM=i1;&C0 OK ATDT#777 CONNECT'

Делал всякие ";&" и \;\&, не помогает, если эту строку убрать тоже фэйл, но в логах ничего нет.

 

amaora
()

[telnet] Выключить локальное эхо

Форум — General

Установлен вот такой telnet клиент.

net-misc/telnet-bsd

Как ему выключить local echo не понятно. Есть только задание символа для переключения режимов удаленной стороной насколько я понял. Какой клиент умеет выключать эхо?

 

amaora
()

[gentoo] Missing charsets in String to FontSet conversion

Форум — General

После emerge world стал очень медленно и без шрифтов запускаться gvim. Раньше такое было, но как решить не помню. Уге перестановил шрифты, перегенерил локали, пробовал use флаги (nls,...), не помогает.

$ gvim
Warning: Missing charsets in String to FontSet conversion
Warning: Missing charsets in String to FontSet conversion

Да и переключение язиков в Xorg сломалось тоге, этот текст прошел через translit.ru.

Thanks.

 

amaora
()

[arm][kernel] Плохой i.MX23

Галерея — Скриншоты

Слишком поздно узнал о том, что поддержки этого SoC нет в ядре с kernel.org (со всеми драйверами по крайней мере). Есть ветвь ядра поддерживаемая freescale и имеющая поганое качество кода. Большая загрузка cpu при любом i/o, вчера устройство умерло от нескольких одновременно работающих emerge, а может и не от них. Надо ковыряться, переписывать, хотя бы драйвер ethernet, но я вместо этого делаю скриншоты и читаю лор.

Нельзя не сказать о том, что написать загрузчик без блоба конвертящего elf в некий sb нельзя. И эта утилита доступна только для x86 как я понял. Но этого мало, для загрузки с SD карты надо переключить некоторые биты в OTP памяти. Это делается через закрытый USB протокол с помощью утилиты которая работает в виндо-ос. Хорошо, что это надо сделать только один раз.

Бэкап серверок не удался видимо будет tor relay.

Про vim и wmii все видно на скрине.

 ,

amaora
()

[gentoo][embedded] время

Форум — General

Устройство имеет rtc, но не имеет питания для rtc. Часы каждый раз обнуляются. В логе загрузки следующее.

 * Mounting proc at /proc ...                                             [ ok ]
 * Mounting sysfs at /sys ...                                             [ ok ]
 * Mounting /dev ...                                                      [ ok ]
 * Starting udevd ...                                                     [ ok ]
 * Populating /dev with existing devices through uevents ...              [ ok ]
 * Waiting for uevents to be processed ...                                [ ok ]
 * Mounting devpts at /dev/pts ...                                        [ ok ]
 * Checking root filesystem ...Reiserfs super block in block 16 on 0x5b000 of format 3.6 with standard journal
Blocks (total/free): 3148736/2951371 by 4096 bytes
Filesystem is clean
File system check timestamp is in the future. Checking now.
Filesystem seems mounted read-only. Skipping journal replay.
File system check timestamp is in the future. Checking now.
Checking internal tree.. finished
                                           [ ok ]
 * Remounting root filesystem read/write ...                              [ ok ]
 * Checking all filesystems ...                                           [ ok ]
 * Mounting local filesystems ...                                         [ ok ]
 * Activating (possible) swap ...                                         [ ok ]
 * Setting system clock using the hardware clock [Local Time] ...
 * hwclock: settimeofday() failed, errno=22: Invalid argument.
 * Failed to set clock You will need to set the clock yourself
                                                                          [ !! ]
 * Configuring kernel parameters ...Unknown HZ value! (83) Assume 100.
                                      [ ok ]
 * Cleaning /var/lock, /var/run ...Unknown HZ value! (82) Assume 100.
                                       [ ok ]
 * Wiping /tmp directory ...                                              [ ok ]
 * One of the files in /etc/{conf.d,init.d} or /etc/rc.conf
 * has a modification time in the future!
 * One of the files in /etc/{conf.d,init.d} or /etc/rc.conf
 * has a modification time in the future!
 * One of the files in /etc/{conf.d,init.d} or /etc/rc.conf
 * has a modification time in the future!
 * One of the files in /etc/{conf.d,init.d} or /etc/rc.conf
 * has a modification time in the future!
...

Думаю надо сохранять время в файл, а когда будет доступна сеть использовать ntp. Вопрос в том есть ли, что нибудь готовое для этого? или мне самому переписывать /etc/init.d/clock ?

 ,

amaora
()

[gentoo] root password

Форум — General

Нет возможности сделать chroot на свеже-распакованную из stage3 систему. Делаю init=/bin/sh,

Freeing init memory: 112K
sh: cannot set terminal process group (-1): Inappropriate ioctl for device
sh: no job control in this shell
sh-4.1#
sh-4.1# su
bash: no job control in this shell
(none) / #
(none) / # passwd 
New password: 
Retype new password: 
passwd: password updated successfully
(none) / #
(none) / # whoami 
root
(none) / #
(none) / # su operator
bash: no job control in this shell
bash: /root/.bashrc: Permission denied
operator@(none) / $ 
operator@(none) / $ whoami 
operator
operator@(none) / $ su
Password: 
su: Permission denied
operator@(none) / $
operator@(none) / $ exit

// reboot

This is localhost.unknown_domain (Linux armv5tejl 2.6.35.3+) 00:02:26

localhost login: root
Password: 

Login incorrect

Что не так, и как надо?

 

amaora
()

Ошибки сборки модулей ядра

Форум — General
$ make CONFIG_DEBUG_SECTION_MISMATCH=y zImage modules

...

WARNING: vmlinux.o(.data+0x1f858): Section mismatch in reference from the variable udc_driver to the function .init.text:fsl_udc_probe()
The variable udc_driver references
the function __init fsl_udc_probe()
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console, 

  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
  KSYM    .tmp_kallsyms1.S
  AS      .tmp_kallsyms1.o
  LD      .tmp_vmlinux2
  KSYM    .tmp_kallsyms2.S
  AS      .tmp_kallsyms2.o
  LD      vmlinux
  SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  GZIP    arch/arm/boot/compressed/piggy.gzip
  AS      arch/arm/boot/compressed/piggy.gzip.o
  CC      arch/arm/boot/compressed/misc.o
  CC      arch/arm/boot/compressed/decompress.o
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  Building modules, stage 2.
  MODPOST 55 modules

...

WARNING: drivers/usb/gadget/g_serial.o(.data+0x240): Section mismatch in reference from the variable gserial_driver to the function .init.text:gs_bind()
The variable gserial_driver references
the function __init gs_bind()
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console, 

ERROR: "soc_codec_dev_mxs" [sound/soc/mxs/snd-soc-mxs-evk-adc.ko] undefined!
ERROR: "mxs_codec_dai" [sound/soc/mxs/snd-soc-mxs-evk-adc.ko] undefined!
ERROR: "mxs_init_lcdif" [drivers/video/mxs/mxsfb.ko] undefined!
ERROR: "mxs_reset_block" [drivers/mmc/host/mxs-mmc.ko] undefined!
ERROR: "mxsfb_get_info" [drivers/media/video/mxs_pxp.ko] undefined!
ERROR: "mxsfb_cfg_pxp" [drivers/media/video/mxs_pxp.ko] undefined!
ERROR: "input_register_polled_device" [drivers/hwmon/mxc_mma7450.ko] undefined!
ERROR: "input_allocate_polled_device" [drivers/hwmon/mxc_mma7450.ko] undefined!
ERROR: "input_free_polled_device" [drivers/hwmon/mxc_mma7450.ko] undefined!
ERROR: "input_unregister_polled_device" [drivers/hwmon/mxc_mma7450.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2

Ядро патченое, из git freescale. Однако, подобные проблемы (undefined!) наблюдаются и при сборке linux-2.6.34-gentoo-r12.

amaora
()

Сравнение конфигов ядра

Форум — General

Чем можно смотреть отличия между двумя конфигами ядра?

diff не подходит, т.к. учитывает порядок строк и комменты.

Спасибо.

amaora
()

[device][usb] volatile storage

Форум — Talks

Бывают такие? Тоже, что и flash drive только память не flash а ram (sd,ddrsd,...).

Если нет, то интересуют идеи как дешево сделать хотябы 1Гб.

_

 ,

amaora
()

RSS подписка на новые темы