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 не будет, драйвер не обнаружен. Было бы интересно увидеть подобное для других устройств.

>>> Просмотр (1366x2304, 327 Kb)

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 все видно на скрине.

>>> Просмотр (1280x1024, 255 Kb)

 ,

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 подписка на новые темы