CHDK Wiki
Advertisement

Компилиране на CHDK под Windows

За да компилирате CHDK под Windows ще ви трябва Unix среда, като например Cygwin или Mingw/MSys. Освен това се предполага, че притежавате достатъчно умения за работа командната конзола на Windows.

Работната среда

Съществува 'готова за използване' среда, която можете да изтеглите оттук.

Настройки

Средата

Променливата PATH

  • Създайте папка CHDK. Например D:\CHDK.
  • Създайте папка за работната среда, например D:\CHDK\gcc.
  • Разархивирайте пакета със средата в тази папка.
  • Добавете папката с изпълнимите файлове в променливата на средата PATH.
Отворете 'Start' менюто -> 'Control Panel' -> 'System', страница 'Advanced', бутон 'Environment Variables'. Използвайте User Variables за модифициране на променливата PATH. Ако тази променлива не съществува, създайте я и й присвоете стойност 'D:\CHDK\gcc\bin'. Ако вече съществува променлива PATH, тогава добавете стойността ';D:\CHDK\gcc\bin' (не забравяйте разделителя ';' (точка и запетая). Запазете така направените настройки.
Забележка
Всички променливи в Windows не са чувствителни към малки и големи букви (case insensitive). Така че, ако имате променлива 'Path' или 'path' или 'pAtH' – модифицирайте тази, която съществува. Не създавайте нова с главни букви!

Програмният код

  • Създайте работна директория, например D:\CHDK\src.
  • Свалете последната версия на изходния код от SVN хранилището (repository): tools.assembla.com в създадената в предната стъпка директория.
Можете да използвате SVN клиент за Windows или просто да изтеглите кода като ZIP архив директно от tools.assembla.com.
Ако вземете кода като ZIP файл, отворете го и разархивирайте съдържанието му в D:\CHDK\src\. После проверете дали съществува папка 'bin' (т.е. D:\CHDK\src\branches\grand\bin\). Ако я няма, създайте празна на това място.
Ако смятате да участвате в разработката или правите собствена версия, която искате да поддържате актуална, за предпочитане е да ползвате SVN клиент, тъй като той има възможност да разрешава конфликти в кода и да взима/слага промените от/в SVN хранилището. SVN пътят до кода на CHDKе https://tools.assembla.com/svn/chdk. Ако използвате, със следната команда можете да вземете кода от SVN архива:
svn checkout https://tools.assembla.com/svn/chdk/trunk chdk

Процес на компилация

Влезте в коренната директория на изходния код (т.е. D:\CHDK\src\branches\grand\). После пишете:

gmake fir

По подразбиране, CHDK се компилира само за A610, версия на фирмуера 1.00e. Ако искате да компилирате за друга камера, просто изпълнете 'gmake' с аргументи PLATFORM и PLATFORMSUB. Например:

 gmake PLATFORM=a620 PLATFORMSUB=100f fir

За да ксмпилирате CHDK за всички камери, напишете:

 gmake batch-zip

Известни проблеми и решения за тях

Конфликти с продукти на Borland

Ако имате компилатори на Borland в променливата PATH, това може да доведе до изпълнение на грешни двоични файлове, които имат същите имена като тези от работната среда на CHDK. Например:

>> Entering to platform/a620/sub/100f
boot.c -> boot.o
stubs_min.S -> stubs_min.o
boot.c -> stubs_auto.S
stubs_auto.S -> stubs_auto.o
-> stubs_entry.S
CAUTION! 'stubs_entry.S' is not uptated due to target firmware binary not found!
Touch Version 4.2 Copyright (c) 1998 Borland International

ERROR! There are unresolved addresses in 'stubs_entry.S' (a620-100f) for the following names:
File stubs_entry.S:
free
Please, add them into 'stubs_entry_2.S' manually!

За да избегнете подобна ситуациа, просто изолирайте продуктите на Borland (т.е. модифицирайте PATH).

Недефиниран указател към `sub_...'

Внезапно или след обновяване на кода, започва да се появява следното съобщение при компилация:

...
-> main.elf
../platform/a610/sub/100e/libplatformsub.a(boot.o): In function `h_usrInit':
boot.c:(.text+0x4): undefined reference to `sub_FFC019BC'
boot.c:(.text+0x10): undefined reference to `sub_FFEB737C'
boot.c:(.text+0x14): undefined reference to `sub_FFEA3A54'
...

За да отстраните този проблем, изтрийте файла 'platform/XXX/sub/YYY/stubs_auto.S' и го издърпайте отново от хранилището на кода.

Advertisement