Вапрос - Rio - 27.03.2011 20:01
sh-elf-gcc -ml -Wl,-Ttext,0x8c010000 -nostartfiles -nostdlib -e _start prog.c -o prog.elf -lgcc
sh-elf-objcopy -O binary prog.elf prog.bin
scramble prog.bin 1ST_READ.BIN
RE: Вапрос - Rio - 27.03.2011 20:28
PS: убунту подойдет для девелопмента?
RE: Вапрос - sc_maxim - 28.03.2011 00:38
скачай DDEr4 и не парь себе мозг с линуксом. Поставишь все оттуда и сможешь программировать для дрима под Windows. Там есть примеры которые просто разобрать и изменитьпод свои нужды. Сборка программ делается через Makefile. После сборки появляется elf-файл (это универсальный формат для объектных и исполнимых файлов для разных ОС и устройств, в том числе и для Дрима), этот файл легко конвертировать через 1st_read.bin checker в bin и запустить на дриме или на эмуле.
RE: Вапрос - Rio - 29.03.2011 16:20
Да токо оно кучу ошибок выдает.
RE: Вапрос - SWAT - 29.03.2011 18:38
Сплошные проблемы у тебя... Не судьба
RE: Вапрос - sc_maxim - 29.03.2011 21:53
Ошибки анализируешь и смотришь что их провоцирует.
Ничего там сложного нет.
RE: Вапрос - SWAT - 30.03.2011 06:11
Да Rio, если ты не научишься фиксить ошибки, у тебя никогда ничего не получится
RE: Вапрос - Rio - 30.03.2011 16:01
Сват, ну я же не настолько дурак)) Естессно, я фиксю их. Но после двадцатого запроса в гугл, нечто на подобии, "Kallisti Os errors" или "KOS errors list", и не находя нужного ответа, уже как-то, честно, опускаются руки))
RE: Вапрос - SWAT - 30.03.2011 18:28
Хмм что то ты не то ищешь... Что у тебя за ошибки вообще?
RE: Вапрос - Rio - 30.03.2011 18:50
RE: Вапрос - sc_maxim - 30.03.2011 19:09
Так ты ничего не скомпилишь. Если уж нужно скомпилировать отдельный файл, то используй это:
kos-cc -o prog.elf prog.c
а вообщето заходи в папку /usr/local/dc/kos/kos/examples/dreamcast
печатай:
make
Так ты соберешь примеры. Если все правильно соберется то найди пример поменьше и попробуй переделать его. Там вроде есть что-то типа Hello world вот с него и начни.
RE: Вапрос - Rio - 31.03.2011 01:43
Цитата:Так ты ничего не скомпилишь.
Почему?
Цитата:kos-cc -o prog.elf prog.c
Откуда ты узнал что компилить надо именно так?
Цитата:Там вроде есть что-то типа Hello world вот с него и начни.
Конечно. Я уже пробовал. Он не работает.
RE: Вапрос - sc_maxim - 31.03.2011 01:59
1) Потому что sh-elf-gcc - это голый компилятор, который не знает где лежать хэдеры и либы, А kos-cc - это врепепер, которий создан специально для того чтобы упростить компиляцию. Узнать о нем можно посмотрев в файлы environ*.sh.
2) Так компилятся программы через gcc компилятор. Не уверен что собранная таким образом программа заработает на дриме, тем более что там еще нужно указывать кучу библиотек. Это я так для примера показал.
3) Если у тебя это не работает, то скорей всего ты не зашел в папки .../kos/kos и /kos/kos-ports и не ввел там make. Или же ты не выполнил команду source environ.sh находясь в папке .../kos/kos, которую нужно выполнять каждый раз при запуске Cygwin.
Если ничего из этого тебе не поможет то скинешь скриншот ошибки, которая возникает при попытке собрать hello.
RE: Вапрос - SWAT - 31.03.2011 08:06
Суда по ошибке, у тебя не загружен environ.sh
Его можно прописать в /etc/profile вместо строки:
Напиши:
Код:
cd /usr/local/dc/kos/kos
./environ.sh
После этого при запуске консоли cygwin, ты будешь находится в нужной папке с выставленными параметрами для компиляциями.
Заходишь в директорию examples/dreamcast/hello и пишешь make. Если собралось, можешь дальше экспериментировать с этим примером.
Да и кстати, если ты все устанавливал сам, а не с готового установщика, то файл environ.sh нужно взять из doc и сконфигурять в нем пути. Но судя по скриншоту он у тебя уже есть.
RE: Вапрос - Rio - 01.04.2011 17:09
PHP код:
# base-files version 4.0-6 # /etc/profile: executed by the command interpreter for login shells.
# The latest version as installed by the Cygwin Setup program can # always be found at /etc/defaults/etc/profile
# Modifying /etc/profile directly will prevent # setup from updating it.
# System-wide profile file
# Some resources... # Customizing Your Shell: http://www.dsl.org/cookbook/cookbook_5.html#SEC69 # Consistent BackSpace and Delete Configuration: # http://www.ibb.net/~anne/keyboard.html # The Linux Documentation Project: http://www.tldp.org/ # The Linux Cookbook: http://www.tldp.org/LDP/linuxcookbook/html/
# Setup some default paths. Note that this order will allow user installed # software to override 'system' software. # Modifying these default path settings can be done in different ways. # To learn more about startup files, refer to your shell's man page. PATH="/usr/local/bin:/usr/bin:${PATH}" MANPATH="/usr/local/man:/usr/share/man:/usr/man:${MANPATH}" INFOPATH="/usr/local/info:/usr/share/info:/usr/info:${INFOPATH}"
# Set the user id USER="$(id -un)"
# TMP and TEMP are defined in the Windows environment. Leaving # them set to the default Windows temporary directory or unset # can have unexpected consequences. unset TMP TEMP TMP="/tmp" TEMP="/tmp"
# Define default printer p='/proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Windows/Device' if [ -e "${p}" ] ; then read -r PRINTER < "${p}" PRINTER=${PRINTER%%,*} fi unset p
# Default to removing the write permission for group and other # (files normally created with mode 777 become 755; files created with # mode 666 become 644) umask 022
# Here is how HOME is set, in order of priority, when starting from Windows # 1) From existing HOME in the Windows environment, translated to a Posix path # 2) from /etc/passwd, if there is an entry with a non empty directory field # 3) from HOMEDRIVE/HOMEPATH # 4) / (root) # If the home directory doesn't exist, create it. if [ ! -d "${HOME}" ]; then if mkdir -p "${HOME}"; then echo "Copying skeleton files." echo "These files are for the users to personalise their cygwin experience." echo echo "They will never be overwritten nor automatically updated." echo cd /etc/skel || echo "WARNING: Failed attempt to cd into /etc/skel!" /usr/bin/find . -type f | while read f; do fDest=${f#.} if [ ! -e "${HOME}${fDest}" -a ! -L "${HOME}${fDest}" ]; then /usr/bin/install -D -p -v "${f}" "${HOME}/${fDest}" fi done unset fDest else echo "${HOME} could not be created." { [ -d "${TEMP}" ] && HOME="${TEMP}"; } || { [ -d "${TMP}" ] && HOME="${TMP}"; } || { [ -d /tmp ] && HOME=/tmp; } || HOME=/ echo "Setting HOME to ${HOME}." fi fi
# Make sure we start in home unless invoked by CHERE if [ ! -z "${CHERE_INVOKING}" ]; then unset CHERE_INVOKING else cd "${HOME}" || echo "WARNING: Failed attempt to cd into ${HOME}!" fi
# Shell dependent settings profile_d () { saved_LC_COLLATE=${LC_COLLATE} LC_COLLATE=C for file in /etc/profile.d/*.$1; do [ -e "${file}" ] && . "${file}" done LC_COLLATE=${saved_LC_COLLATE} unset saved_LC_COLLATE }
if [ ! "x${BASH_VERSION}" = "x" ]; then HOSTNAME=$(/usr/bin/hostname) profile_d sh [ -f "/etc/bash.bashrc" ] && . "/etc/bash.bashrc" elif [ ! "x${KSH_VERSION}" = "x" ]; then typeset -l HOSTNAME=$(/usr/bin/hostname) profile_d sh PS1=$(print '\033]0;${PWD}\n\033[32m${USER}@${HOSTNAME} \033[33m${PWD/${HOME}/~}\033[0m\n$ ') elif [ ! "x${ZSH_VERSION}" = "x" ]; then HOSTNAME=$(/usr/bin/hostname) profile_d zsh PS1='(%n@%m)[%h] %~ %% ' elif [ ! "x${POSH_VERSION}" = "x" ]; then HOSTNAME=$(/usr/bin/hostname) PS1="$ " else HOSTNAME=$(/usr/bin/hostname) profile_d sh PS1="$ " fi
export PATH MANPATH INFOPATH USER TMP TEMP PRINTER HOSTNAME PS1
# Check to see if mkpasswd/mkgroup needs to be run try and cut down the emails # about this on the lists! # # The following are the conditions under which the group name special cases # will appear (where uid and gid are the effective user and group ids # for the current user, and pgsid is the primary group associated with the # SID for the current user): # mkpasswd: # gid is not in /etc/group # uid is not in /etc/passwd # passwd/group_GID_clash(<gid>/<pgsid>): # gid is not in /etc/group # uid is in /etc/passwd # pgsid is in /etc/group (and does not match gid) # mkgroup: # gid is not in /etc/group # uid is in /etc/passwd # pgsid is not in /etc/group # # If this message keeps appearing and you are sure it's a mistake (ie, don't # email about it!), comment out the test below. case "$(id -ng)" in mkpasswd ) echo "Your group is currently \"mkpasswd\". This indicates that your" echo "gid is not in /etc/group and your uid is not in /etc/passwd." echo echo "The /etc/passwd (and possibly /etc/group) files should be rebuilt." echo "See the man pages for mkpasswd and mkgroup then, for example, run" echo echo "mkpasswd -l [-d] > /etc/passwd" echo "mkgroup -l [-d] > /etc/group" echo echo "Note that the -d switch is necessary for domain users." ;; passwd/group_GID_clash* ) echo "Your group is currently \"passwd/group_GID_clash(gid/pgsid)\". This" echo "indicates that your gid is not in /etc/group, but the pgsid (primary " echo "group associated with your SID) is in /etc/group." echo echo "The /etc/passwd (and possibly /etc/group) files should be rebuilt." echo "See the man pages for mkpasswd and mkgroup then, for example, run" echo echo "mkpasswd -l [-d] > /etc/passwd" echo "mkgroup -l [-d] > /etc/group" echo echo "Note that the -d switch is necessary for domain users." ;; mkgroup ) echo "Your group is currently \"mkgroup\". This indicates that neither" echo "your gid nor your pgsid (primary group associated with your SID)" echo "is in /etc/group." echo echo "The /etc/group (and possibly /etc/passwd) files should be rebuilt." echo "See the man pages for mkpasswd and mkgroup then, for example, run" echo echo "mkpasswd -l [-d] > /etc/passwd" echo "mkgroup -l [-d] > /etc/group" echo echo "Note that the -d switch is necessary for domain users." ;; esac
cd /usr/local/dc/kos/kos source environ.sh
вот полный текст моего файла. судя по всему заданная строка в нем уже есть.
при попытке вызвать из консоли команду make пишет ругательное "command not found".
RE: Вапрос - sc_maxim - 01.04.2011 20:01
значит ты установил Cygwin не полностью. Ты устанавливал с DDEr4?
Если да то попробуй все переустановить заново, удавлив предварительно все его папки. И нужно щелкнуть при выборе компонентов Cygwin по All - Default, чтобы оно изменилось на All - Install, иначе опять не будет команды make.
RE: Вапрос - Rio - 02.04.2011 12:53
Вот еще такой вопрос. Откомпайлил я hello world. В папке, соответсвенно, появилось несколько файлов, в том числе и файл hello.elf огромного (просто таки ужасающего) размера - аж целых 998 Кбайт. Что не мало, согласитесь.
Итак, что мне надо дальше с этим файлом делать? На попытки выполнить из командной строки утилиты elf2bin и scramble интерпретатор отвечает что команды не найдены.
RE: Вапрос - SWAT - 02.04.2011 13:03
Ну конечно он их не нашел, потому что их там нет.
Замени в Makefile строки:
PHP код:
$(TARGET): $(OBJS) kos-cc -o $(TARGET) $(OBJS)
На эти:
PHP код:
$(TARGET): $(OBJS) $(KOS_CC) $(KOS_CFLAGS) $(KOS_LDFLAGS) -o $(TARGET) $(KOS_START) $(OBJS) $(OBJEXTRA) $(KOS_LIBS) $(KOS_STRIP) $(TARGET) $(KOS_OBJCOPY) -R .stack -O binary $(TARGET) unscrambled.bin $(KOS_BASE)/utils/scramble/scramble unscrambled.bin 1ST_READ.BIN
Если у тебя нет утилиты utils/scramble/scramble то закинь туда ее.
Размера файла пугаться не стоит, в нем есть куча ненужно инфы, которая потом удалится с помощью KOS_STRIP. Да и при конвертации в бинарник, он еще немного уменьшится.
RE: Вапрос - Rio - 02.04.2011 13:04
Не понял. Еще разочек пожалуйста. Что делать с hello.elf.
RE: Вапрос - SWAT - 02.04.2011 13:15
Тебе ничего не придется с ним больше делать, когда ты внесешь изменения в Makefile как я сказал.
|