3PPC.net - лучшее для Смартфонов, GPS-навигаторов и Видеорегистраторов  

Вернуться   3PPC.net - лучшее для Смартфонов, GPS-навигаторов и Видеорегистраторов > Основной форум > Видеорегистраторы > Создание и модификация ПО

Создание и модификация ПО Раздел для программистов желающих собрать или модифицировать прошивку

Ответ
 
Опции темы
Старый 23.04.2013, 15:12   #1
antonkam
Вникающий
 
Регистрация: 13.11.2012
Адрес: Томск
Сообщений: 32
Репутация: 43
Устройство: Нет
Создание прошивок для ВР на чипе Ambarella

Итак, господа, удалось-таки собрать прошивку из исходников Ambarella SDK
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Для сборки потребуется следущее ПО:
- Cygwin
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

- Arm RealView Development Suite v2.2
__________________

- Кросс-компилятор я пользовал Yagarto 20121222
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

- Arm Development Suite 1.2
__________________

Скачивайте и пробуйте. С первого раза 100% ничего не соберётся, поэтому готовьтесь потратить много времени(у меня ушло около месяца). Где и какое ПО должно лежать смотрим в файлах исходников(\system\env\bash_ads_env, \system\env\bash_gnu_env, \system\env\bash_rvct_env) или исправляем в них пути.
Запуск сборки скриптом \system\build\a2ssdk_camera\scripts\make_all.bat
На выходе будет 2 файла: .bin и .elf.
Для желающих посмотреть, что есть на данный момент выкладываю прошивку для устройств типа f500. Тестил на Mystery MDR-800HD.
Допиливать ещё много чего:
- Иногда самопроизвольное выключение при запуске
- На данный момент в конфигах отключён аудиочип, потому что устройство нормально загружается только при подключённом usb-кабеле.
- Видео нормально пишется только секунд 10, потом через кадр.
- Нужно отзеркалить изображение на дисплее и добавить в меню переворот.
- При пересвете на видео появляются полосы.
- ...
Прикладываю фотографии меню.

Прошивка для f500
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Глючное тестовое видео:
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.


P.S. Если будут вопросы по теме, пишите сюда, будем разбираться.

Полезная информация для оформления сообщений:
Работа с вложениями на форуме — как выложить файл или вставить картинку
Как пользоваться спойлером или как красиво убрать большой кусок текста


Вместо слов благодарности поднимайте репутацию вашим помощникам при помощи кнопки : и вам удобно и им приятно

Последний раз редактировалось Гость; 11.06.2013 в 22:13. Причина: перезалил
antonkam вне форума   Цитировать выделенное Ответить с цитированием
17 пользователя(ей) сказали cпасибо:
Показать/Скрыть список поблагодаривших

Старый 09.08.2013, 10:04   #161
SergMyz
Местный
 
Регистрация: 04.03.2013
Сообщений: 85
Репутация: 23
Устройство: Нет
Карточка что-ли? Может и она!

добавлено сообщение
3ppcshnikunamer, Спасибо. Есть пара мыслей. Завтра опробую. Еще бы китаец писал бы строки, которые менял. Надеюсь поможет.

добавлено сообщение
Вот что выдает додовская и каркамовская прошивки на запрос информации о карте.
<0>a:\> <0>cardmgr d info

slot 'd' info
<0>present: yes
<0>type: SDHC memory
<0>name: SD8GB0
<0>bus width: 4
<0>total sectors: 15597568
<0>sector size: 512
<0>write-protect: no
<0>format: FAT32
<0>speed: 24000000 Hz
<0>a:\> <0>

А вот моя прошивка
<0>a:\> <0>cardmgr d info

slot 'd' info
<0>present: yes
<0>type: SDHC memory
<0>name: SD8GB0
<0>bus width: 4
<0>total sectors: 15597568
<0>sector size: 512
<0>write-protect: yes
<0>format: FAT32
<0>speed: 24000000 Hz
<0>a:\> <0>

Параметр: write-protect: на моей прошивке = yes - включена защита от записи. Вот и мучаюсь!!!

Составил "сводную" таблицу GPIO (моя прошивка, DOD, Каркам)
+ - Файл:
GPIO	Моя  DODGSE550  Каркам Q5
gpio0:	 HW 1	 HW 1	 HW 1
gpio1:	 HW 1	 HW 1	 HW 1
gpio2:	 HW 0	 HW 0	 HW 0
gpio3:	 HW 0	 HW 0	 HW 0
gpio4:	 HW 0	 HW 0	 HW 0
gpio5:	 HW 1	 SW 0	 SW 0
gpio6:	 HW 1	 HW 1	 HW 1
gpio7:	 HW 1	 HW 1	 HW 0
gpio8:	 HW 0	 HW 0	 HW 0
gpio9:	 HW 1	 HW 1	 HW 0
gpio10:	 SW 1	 SW 1	 SW 1
gpio11:	 HW 0	 SW 0	 SW 0
gpio12:	 HW 0	 SW 0	 SW 0
gpio13:	 SW 0	 SW 0	 SW 0
gpio14:	 HW 1	 HW 0	 HW 1
gpio15:	 HW 1	 HW 1	 HW 1
gpio16:	 HW 0	 SW 0	 SW 0
gpio17:	 HW 0	 HW 0	 HW 0
gpio18:	 HW 1	 HW 0	 HW 0
gpio19:	 HW 1	 HW 0	 HW 0
gpio20:	 HW 0	 HW 0	 HW 0
gpio21:	 HW 0	 HW 0	 HW 0
gpio22:	 HW 0	 HW 0	 HW 0
gpio23:	 HW 0	 HW 0	 HW 0
gpio24:	 HW 0	 HW 0	 HW 0
gpio25:	 HW 0	 HW 0	 HW 0
gpio26:	 HW 0	 HW 0	 HW 0
gpio27:	 HW 0	 HW 0	 HW 0
gpio28:	 HW 0	 HW 0	 HW 0
gpio29:	 HW 1	 SW 1	 HW 1
gpio30:	 HW 1	 HW 1	 HW 1
gpio31:	 HW 0	 HW 1	 HW 0
gpio32:	 HW 0	 SW 0	 SW 0
gpio33:	 HW 0	 HW 1	 HW 1
gpio34:	 HW 0	 HW 1	 HW 1
gpio35:	 HW 1	 HW 1	 HW 1
gpio36:	 SW 0	 SW 0	 SW 0
gpio37:	 HW 0	 SW 0	 SW 0
gpio38:	 SW 0	 SW 0	 SW 0
gpio39:	 SW 0	 SW 0	 SW 0
gpio40:	 SW 1	 SW 1	 SW 1
gpio41:	 SW 0	 SW 0	 SW 0
gpio42:	 SW 1	 SW 0	 SW 0
gpio43:	 HW 0	 SW 0	 SW 0
gpio44:	 HW 0	 SW 0	 SW 0
gpio45:	 SW 0	 SW 0	 SW 0
gpio46:	 SW 1	 SW 0	 HW 0
gpio47:	 SW 0	 SW 0	 SW 0
gpio48:	 SW 1	 SW 1	 SW 1
gpio49:	 SW 1	 SW 1	 SW 1
gpio50:	 SW 0	 SW 0	 SW 0
gpio51:	 SW 0	 SW 0	 SW 0
gpio52:	 SW 1	 SW 1	 SW 1
gpio53:	 SW 0	 SW 1	 SW 0
gpio54:	 SW 0	 HW 0	 HW 0
gpio55:	 HW 0	 SW 0	 SW 0
gpio56:	 HW 0	 SW 0	 SW 0
gpio57:	 HW 0	 SW 0	 SW 0
gpio58:	 SW 0	 SW 0	 SW 0
gpio59:	 HW 0	 HW 0	 HW 0
gpio60:	 HW 0	 HW 0	 HW 0
gpio61:	 HW 0	 HW 0	 HW 0
gpio62:	 HW 0	 HW 0	 HW 0
gpio63:	 HW 0	 HW 0	 HW 0
gpio64:	 SW 1	 SW 1	 SW 1
gpio65:	 HW 0	 HW 0	 HW 0
gpio66:	 HW 0	 HW 1	 HW 1
gpio67:	 HW 0	 HW 0	 HW 0
gpio68:	 HW 0	 HW 1	 HW 1
gpio69:	 HW 0	 SW 0	 SW 0
gpio70:	 HW 0	 SW 0	 SW 0
gpio71:	 HW 0	 SW 0	 SW 0
gpio72:	 HW 0	 SW 0	 SW 0
gpio73:	 HW 0	 SW 0	 SW 0
gpio74:	 HW 0	 SW 0	 SW 0
gpio75:	 HW 0	 SW 0	 SW 0
gpio76:	 HW 0	 SW 0	 SW 0
gpio77:	 HW 0	 HW 0	 HW 1
gpio78:	 HW 0	 HW 1	 HW 0
gpio79:	 HW 0	 HW 0	 HW 0
gpio80:	 HW 0	 HW 0	 HW 1
Моя идея с GPIO 45 не сработала (то что было у китайца про проблемы с SD картой)
Попутно узнал, что за файл .history там содержится список команд, которые выдает RTOS (например, я ввожу в консоли) в случае с DOD GSE550 и Каркам Q5, где сообщения RTOS отключены файл .history пустой, для работы на скорости 9600 с GPS модулем.
Глючил "подопытный" регистратор поменял прошивку на DOD = не глючит, что такое не знаю.

Пока попробую по вышеуказанной таблице выставить свои GPIO, как в додовской прошивке.

Что такое SW и HW не знаю??? Кто знает? Чем отличаются?
__________________
DOD GSE550 - для экспериментов, катается в машине TrendVision TV-Q5NV

Последний раз редактировалось GoshanV; 12.08.2013 в 23:23. Причина: Добавлено сообщение
SergMyz вне форума   Цитировать выделенное Ответить с цитированием
Старый 10.10.2013, 00:08   #162
Mi81
Знающий
 
Регистрация: 28.09.2008
Сообщений: 166
Репутация: 36
Устройство: Нет
Цитата:
Сообщение от SergMyz Посмотреть сообщение
на моей прошивке = yes - включена защита от записи
А не проще найти это место в исходнике? Возможно, там просто ошибка в переходе по условию.
И еще, не знаю поможет ли, но попробуйте отформатировать карту с размером кластера 32КБ, некоторые регистраторы любят этот размерчик.
Из-под винды как-то так:
format диск: /FS:FAT32 /A:32k
Ну или в exFAT попробуйте.
Mi81 вне форума   Цитировать выделенное Ответить с цитированием
Старый 10.10.2013, 10:41   #163
SergMyz
Местный
 
Регистрация: 04.03.2013
Сообщений: 85
Репутация: 23
Устройство: Нет
Цитата:
Сообщение от SergMyz Посмотреть сообщение
Лог выдает ошибку:
Card inserted: D
Write protected
fopen D error, 2

нашел в system/src/app/a16isky/utility/card.c

+ - Файл:
/**
 * Do test when card inserted
 *
 * return:
 *	 0 - success
 *	-1 - fail
 **/
static int app_card_1st_access_test(int slot)
{
	int rval;
	int n=131072; //Should be modified if the block size which recoder uses is change.
	MCHAR drive = (slot+'A');
	MCHAR tmp[16]={0};
	MCHAR f_mode[3]={'w','+','\0'};
	char tmp2[16]={0};
	FF_FILE *ff;
	FF_DEV_INF dev;

	{
		PF_VOL_CFG vol_config;

		/** the 1st getdev takes much more time, and to check driver status by the way. **/
		/* Enlarge FAT buffer to speed up the 1st ff_getdev() */
		pf_getvolcfg(drive, &vol_config);

		/* Set large fat buffer size */
		vol_config.volume_config |= PF_SET_FAT_CACHE_SIZE;
		vol_config.fat_buff_size <<= 3;
		pf_setvolcfg(drive, &vol_config);

		rval = ff_getdev(drive, &dev);

		/* Set fat buffer size back */
		vol_config.volume_config |= PF_SET_FAT_CACHE_SIZE;
		vol_config.fat_buff_size >>= 3;
		pf_setvolcfg(drive, &vol_config);

		if(rval<0){
			printk("drive is not valid");
			return -1;
		}
	}

	//printk("Write dummy file\n");
	sprintf(tmp2, "%c%s\0", drive, ":\\.zzz");
	asc_to_uni(tmp2,tmp);
	for(rval=0;rval<16;rval++){
		tmp2[rval]=rval;
	}

	ff = ff_fopen(tmp,f_mode);
	if(ff != NULL){
		rval = ff_fwrite(tmp2,1,n,ff);
		if(rval != n){
			printk("fwrite fail %d",pf_errnum());
			rval=(((dev.ecl*dev.bps)>>10) * dev.spc); //in KB
			if(rval < (n>>10)){ //error due to space run out
				rval = 0;
			} else {
				scardmgr_status_t card_status;

				scardmgr_get_status(slot, &card_status);
				if(card_status.wp){ //error due to write protect
					rval = 0;
				} else {
					rval = -2;
				}
			}
			goto access_check_done;
		}
	#if 0
		ff_fseek(ff,0,FF_SEEK_SET);
		rval = ff_fread((void *)tmp2,1,16,ff);
		if(rval!=16){
			printk("fread fail %d",pf_errnum());
			rval=-3;
			goto access_check_done;
		}
		for(rval=0;rval<16;rval++){
			if(tmp2[rval]!=rval){
				printk("file read/write check fail");
				rval=-4;
				goto access_check_done;
			}
		}
	#endif
	} else {
		scardmgr_status_t card_status;
		printk("fopen %s error, %d",tmp,pf_errnum());
		scardmgr_get_status(slot, &card_status);
		if(card_status.wp){ //error due to write protect
			rval = 0;
		} else {
			rval = -6;
		}
	}

access_check_done:
	if(ff!=NULL){
		ff_fclose(ff);
		if(ff_remove(tmp) < 0){
			printk("ffremove fail %d",pf_errnum());
		}
	}

	if(rval<0){
		return -1;
	}

	return 0;
}
Вот параметр card_status.wp выдает Yes. Почему? Не могу найти функцию в исходниках с этим параметром.
Пробовал в строке int n=131072; //Should be modified if the block size which recoder uses is change. n=524288 (512 Кб) размер кластера на моей SD карточке = все равно выдает "карта защищена от записи"!

добавлено через 52 секунды
Цитата:
Сообщение от Mi81 Посмотреть сообщение
А не проще найти это место в исходнике? Возможно, там просто ошибка в переходе по условию.
Не могу найти.
__________________
DOD GSE550 - для экспериментов, катается в машине TrendVision TV-Q5NV

Последний раз редактировалось SergMyz; 10.10.2013 в 10:41. Причина: Добавлено сообщение
SergMyz вне форума   Цитировать выделенное Ответить с цитированием
Старый 11.10.2013, 12:39   #164
Mi81
Знающий
 
Регистрация: 28.09.2008
Сообщений: 166
Репутация: 36
Устройство: Нет
Цитата:
Сообщение от SergMyz Посмотреть сообщение
Не могу найти.
Ну для грубого анализа я бы начал с поиска в исходниках строк MSG_CARD_PROTECT, STR_CARD_PROTECTED, APP_WP_CARD, переменных card_act и card_wp. Ведь вам нужно выяснить из-за чего это происходит, значит найти место где происходит эта проверка и понять происходит ли она правильно.
Обратите внимание на сруктуры sys_status и card_status, которые по ходу исполнения обмениваются значениями и на функцию app_card_1st_access_test.
Наконец, принудительно задайте в этой функции значение rval=0 при проверке
if(card_status.wp){ //error due to write protect
и посмотрите на результат.
Если вы используете приложение iskyappbase, то обратите внимание, что в файле card.c в строке 17 неверно указан путь в диррективе include, в результате, возможно, в проект включается не тот файл apps.h.
Как я понимаю, карта прибором читается? Пробовали закинуть на нее ролик и просмотреть в регистраторе?
Директорий DCIM (или как он там называется) создается?
Поддается ли карточка форматированию прибором?
Ну и последнее. Может у вас домашние компы завирусованы? Сами карточку видят, а на других устройствах она protected?

Последний раз редактировалось Mi81; 11.10.2013 в 13:42.
Mi81 вне форума   Цитировать выделенное Ответить с цитированием
Старый 14.10.2013, 10:24   #165
SergMyz
Местный
 
Регистрация: 04.03.2013
Сообщений: 85
Репутация: 23
Устройство: Нет
Грубый анализ не помогает! Поиск выдает только использование этих функций и переменных, а где все это задается не понятно.
rval=0 ставил везде = не помогает, все равно стоит защита от записи.
Карта совершенно нормальная! С нее все читается, на том же регистраторе на других прошивках все нормально работает.
Скорей всего это результат того что прошивка собрана на другом BSP у моего регистратора это yamaha, а в исходниках ее нет.
__________________
DOD GSE550 - для экспериментов, катается в машине TrendVision TV-Q5NV
SergMyz вне форума   Цитировать выделенное Ответить с цитированием
Старый 14.10.2013, 10:54   #166
SergMyz
Местный
 
Регистрация: 04.03.2013
Сообщений: 85
Репутация: 23
Устройство: Нет
Есть такая вот структура в system/include/fio/scardmgr.h
+ - Файл:
typedef struct scardmgr_status_s
{
	u8	card_present;		/**< Whether a card is present */
	u32	card_type;		/**< Type of card */
	/* Card types could be combo cards! */
#define SCARDMGR_CARD_MEM	0x1	/**< Memory card */
#define SCARDMGR_CARD_IO	0x2	/**< IO card */
#define SCARDMGR_CARD_MECH	0x4	/**< Mechanical (not solid state) */
#define SCARDMGR_CARD_SD	0x8	/**< SD card */
#define SCARDMGR_CARD_MMC	0x10	/**< MMC card */
#define SCARDMGR_CARD_SDHC	0x20	/**< SDHC card */
	u8	bus_width;		/**< Data bus width */
	u32	manfid;			/**< Manufacture ID */
	u32	vers;			/**< Version */
	char	name[64];		/**< Name of card (if any) */

	u32	seccnt;			/**< Number of sectors */
	u16	secsize;		/**< Sector size */
	u8	wp;			/**< Whether card is Write protected */
	int	format;			/**< Format of card */
	char	speed[16];		/**< current card speed */
	void    *extra;                 /**< pointer to extra infomation */
} scardmgr_status_t;
В card.c строка scardmgr_status_t card_status;
Только найти не могу! Где заполняется параметр WP u8 wp; /**< Whether card is Write protected */ защита от записи???
__________________
DOD GSE550 - для экспериментов, катается в машине TrendVision TV-Q5NV
SergMyz вне форума   Цитировать выделенное Ответить с цитированием
Старый 14.10.2013, 15:35   #167
Mi81
Знающий
 
Регистрация: 28.09.2008
Сообщений: 166
Репутация: 36
Устройство: Нет
Цитата:
Сообщение от SergMyz Посмотреть сообщение
В card.c строка scardmgr_status_t card_status;
Только найти не могу! Где заполняется параметр WP u8 wp
Для грубой прикидки можно в функции :
+ - Файл:
int scardmgr_get_status(int slot, scardmgr_status_t *status)
{
	scardmgr_dev_t *dev = scardmgr_get_dev(slot);

	if (dev == NULL || dev->get_status == NULL)
		return -1;

	return dev->get_status(status);
}
создать переменную
int rval;
перед return'ом выполнить
rval= dev->get_status(status);
после этого проверить, что речь идет именно об SD-карточке по условию
if staus->card_type=SCARDMGR_CARD_SD
и если это так, то принудительно установить wp в ноль, типа карточка не защищена
{
staus->wp = 0;
}

а затем вернуть значение rval
return rval;

И еще раз посмотрите свою конфигурацию, возможно, в ней просто что-то не так.
Mi81 вне форума   Цитировать выделенное Ответить с цитированием
Старый 10.06.2016, 13:49   #168
ShuraLuberetsky
Новичок
 
Регистрация: 09.06.2016
Сообщений: 2
Репутация: 0
Устройство: Нет
А не сохранился ли у кого файл a2s.tar.bz2 (Ambarella SDK) из шапки темы? Ссылка из первого сооющения не работает.
ShuraLuberetsky вне форума   Цитировать выделенное Ответить с цитированием
Старый 23.06.2016, 11:04   #169
DimanCheep
Новичок
 
Регистрация: 22.06.2016
Сообщений: 1
Репутация: 0
Устройство: Нет
Цитата:
Сообщение от ShuraLuberetsky Посмотреть сообщение
А не сохранился ли у кого файл a2s.tar.bz2 (Ambarella SDK) из шапки темы? Ссылка из первого сооющения не работает.
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
не подойдет?
DimanCheep вне форума   Цитировать выделенное Ответить с цитированием
Старый 07.07.2016, 15:30   #170
ShuraLuberetsky
Новичок
 
Регистрация: 09.06.2016
Сообщений: 2
Репутация: 0
Устройство: Нет
Это немного другой SDK, для веб-камер.
ShuraLuberetsky вне форума   Цитировать выделенное Ответить с цитированием
Старый 31.08.2016, 08:51   #171
antonkam
Вникающий
 
Регистрация: 13.11.2012
Адрес: Томск
Сообщений: 32
Репутация: 43
Устройство: Нет
По многочисленным просьбам перевыкладываю исходники Ambarella SDK
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.



Последний раз редактировалось GoshanV; 31.08.2016 в 09:13. Причина: Зеркало
antonkam вне форума   Цитировать выделенное Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
ShuraLuberetsky (30.09.2016), sotrack (27.12.2016)
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 05:13. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot