LINUX.ORG.RU

Сообщения IOne

 

Выбор загрузчика для загрузки бинарного файла с флешки

Форум — Development

Есть флешка, желательно использовать FAT32, но можно и другую ФС, на неё записан некий бинарный файл.

Нужно сделать эту флешку загрузочной, чтобы загрузчик загружал бинарный файл в заданный адрес ОЗУ и передавал управление на этот адрес.

Какой загрузчик лучше использовать для этой цели?

 

IOne
()

Не работает MBR на материнской плате с UEFI

Форум — Development

Есть свой собственный загрузчик, но он почему-то не работает на материнской плате с UEFI (Intel DH77EB), MBR не выдаёт никаких сообщений, на материнских платах с обычным BIOS всё нормально. MBR записываю на флешку, UEFI Boot выключен.

Код начала загрузчика (BOOTSTACK=0xFFF0, BOOTSEG=0x1000):

        .set SIGNATURE,0xaa55
        .set LOAD,0x7c00        # Load address
        .code16
        .text
        .globl start            # Entry point
start:
         jmp    main
        .= start +3 
oem :.ascii "oc2k 210"
secsiz  :.word  0
clsiz   :.byte  0
ressecs :.word  0
fatcnt  :.byte  0
rootsiz :.word  0
totsec  :.word  0
media   :.byte  0
fatsiz  :.word  0
trksecs :.word  0
headcnt :.byte  0   #?????????????????
hidnsec :.word  0
# нестандартные расширения 
        .= start +52
fsec:   .word 0        # первый сектор                  52
        .word 0        #                    
spc :   .word 0        # spt*headcnt                    56
        .word 0        #                        
spt :   .word 0        #                                60
        .word 0        #                        
fsec0:  .word 0        # первый сектор                  64
        .word 0        #                    
drive:  .byte 0        # номер диска например 0x80      68
head:   .byte 0        #                                69
cyl :   .word 0        #                                70
nsec:   .word 0        #                                72
        .word 0        #                                74
startmsg:.ascii "Start \0"  #        80
okmsg:.ascii "Ok \r\n\0"  #        
main:   
    
    movw    $BOOTSEG, %ax           #  ax=0x1000 
    movw    %ax, %es                # es=ax=0x1000 set up %es, (where we will load boot2 to)
    movw    %ax, %ss                # ss=0x1000  
    movw    $BOOTSTACK-64, %sp      # sp=0xfff0-64
    movw    $(LOAD/16),%ax        
    movw    %ax,%ds                 #  data  ds=0x7c0

    movw    $startmsg, %si
    call    message

На материнской плате с UEFI сообщение не выводится.

Или, вот, для примера, MBR, который выводит «Hello World», записываю его на флешку напрямую командой dd, на материнской плате с BIOS работает, а с UEFI — нет.

В чём отличия между настоящим BIOS и эмуляцией BIOS в UEFI?

 , , , ,

IOne
()

Как определить обрыв соединения?

Форум — Development

Сервер вызывает accept() на блокирующий сокет и ждёт подключения.

Клиент вызывает connect() чтобы установить соединие, вызывает recv() на блокирующий сокет и ждёт данные.

После этого у сервера пропадает питание, т.е. TCP/IP соединение не закрывается корректно.

Но клиент продалжает висеть на recv().

После того, как сервер по новой вызовет accept(), соединение уже не установится, т.к. клиент должен использовать новый сокет, заново вызвать connect() и т.д.

Как клиент может узнать, что соединение разорвано? Попробовал как написано тут http://stunpix.com/post/socket-closed-detection/ , но poll() после обрыва возвращает 0, видимо из-за некорректного завершения соединения.

IOne
()

Как вызвать из программы команду shell и прочитать возвращённую строку

Форум — Development

Нужно вызвать из программы на C команду shell(либо запустить исполняемый файл с аргументом) и узнать, вернула ли что-нибудь команда или нет.

Можно вызвать команду функцией system(), вывод записать в файл, потом прочитать этот файл, но по-идее должен быть путь проще.

IOne
()

Как можно узнать без использования файла блокировки, используется ли tty?

Форум — Development

Есть терминальные устройства, для их создания используется socat (например, socat PTY,link=port1 PTY,link=port2).

Можно ли как-то узнать в программе без использования файла блокировки в /var/lock, используется ли это устройство ещё кем-то (например, другая программа сделала open() на это устройство и не записала ничего в /var/lock)?

 

IOne
()

Общение с minicom на одном компьютере через виртуальное устройство.

Форум — Development

Допустим, я использую minicom, в его настройках я указываю какое-то устройство. Нужно написать программу, которая бы общалась с minicom через это же устройство на этом же компьютере. Т.е. если я что-то набираю в minicom, эти данные должны попадать в мою программу и наоборот.

Попытался для этих целей использовать /dev/ttyN, в программе открыл этот порт и вызываю read() или write(), но данные не приходят. Может нужно как-то включить loopback для виртуального терминала и т.д., или нужно писать свой драйвер терминала?

IOne
()

как управлять питанием устройства через ACPI?

Форум — Linux-hardware

На ноутбуке есть 4 COM-порта(в составе чипа SCH3114), они, как и положено, доступны через адреса ввода-вывода 0x3f8, 0x2f8 и т.д. Проблема в том, что под Linux, MS DOS и т.д. один из портов не работает. Читаю его регистры по соответствующему адресу ввода-вывода, возвращается 0xff. С остальными тремя портами всё нормально. А в Windows 7 этот порт работает. Скачал утилиту под Windows, которая позваляет читать данные напрямую из любых адресов ввода-вывода. Когда Windows 7 не использует COM-порт, из всех его регистров читается 0xff, как только Windows начинает его использовать(например, эмулятор терминала), регистры читаются нормально.

Я подозреваю, что это из-за того, что Windows 7 управляет питанием портов через ACPI. Проблемный порт видимо по умолчанию выключен.

Есть ли какие-нибудь демоны и утилиты под Linux для управления питанием устройств через ACPI? Или единственный выход - писать программу для ACPI на AML?

IOne
()

Подскажите описание алгоритма вычисления контрольной суммы

Форум — Development

Есть функция на C, вычисляющая контрольную сумму флэша:

unsigned boardMemSum(unsigned* ptr, int nLongs)
{
    unsigned sum, ix;

    for(sum = nLongs, ix = 0; ix < nLongs; ix++)
	sum += ptr[ix];

    return ~sum;
}

где ptr - указатель на начало памяти флэша, nLongs - длина данных в 4-х байтных словах.

Если вызвать эту функцию для всего флэша, а результат (4 байта) сохранить в любом свободном месте флэша(область флэша считается свободной, если биты равны 1), то при последующем вызове boardMemSum для всего флэша она вернёт 0xffffffff.

Если после этого записать во флэш пользовательские данные(не важно, в свободное место, или нет), вызвать boardMemSum для пользовательских данных и сохранить результат в свободное место флэша, то результат вызова boardMemSum для всего флэша не изменится и будет равен 0xffffffff.

На практике это не работает, у начальника нет описания алгоритма. Дайте пожалуйста ссылку на описание алгоритма, в частности, интересует как реализовать этот алгоритм для длины не кратной 4 байт.

 

IOne
()

Доступ к локальным файлам из-под trac

Форум — Admin

Стоит Apache + trac, нужно сделать доступ к локальным файлам сервера из-под wiki trac'a. Я сделал ссылки на каталоги в /var/www/html Проблема в том, что wiki trac'a в ссылках на директории приходится указывать IP машины, например [http://192.168.0.1/myDir myDir]. Если прописать вместо IP localhost, то клиент будет пытатся зайти в эту директорию у себя. У сервера несколько IP, соответственно придётся делать несколько ссылок для разных сетей.

Каким образом можно сделать ссылку на локальную директорию без указания IP сервера?

 ,

IOne
()

trac+svn

Форум — Admin

Fedora 16 x64, установлены пакеты httpd, subversion, mod_python, mod_dav, mod_dav_svn.

Проблема в том, что Питон не видит модуля svn:

# python
>>> from svn import core
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named svn

Из-за этого из-под trac нет доступа к svn. В остальном всё нормально, через веб можно заходить в trac и svn.

В каталоге /usr/lib/python2.7/site-packages find -name *svn* выдаёт

./trac/tests/functional/svntestenv.py
./trac/tests/functional/svntestenv.pyc
./trac/tests/functional/svntestenv.pyo
./trac/versioncontrol/svn_fs.pyc
./trac/versioncontrol/svn_authz.py
./trac/versioncontrol/svn_fs.pyo
./trac/versioncontrol/svn_fs.py
./trac/versioncontrol/svn_prop.pyc
./trac/versioncontrol/svn_authz.pyc
./trac/versioncontrol/svn_authz.pyo
./trac/versioncontrol/svn_prop.pyo
./trac/versioncontrol/svn_prop.py

В каталоге /usr/lib64/python2.7/site-packages ничего не найдено.

На оф. сайте по этому поводу сказано: So either move the svn and libsvn found in the /opt/subversion-xxx/lib/svn-python folder into your site-packages folder, or add the above folder to your PYTHONPATH, or create a ​svn.pth file in your Python site-packages folder with the above folder path as its single line content (an example on a FreeBSD installation, again: /usr/local/lib/pythonN.N/site-packages/).

Но каталог svn-python я нигде не нашел. Где мне взять этот модуль?

 , , , svn-python,

IOne
()

Как заставить makefile использовать ссылки?

Форум — Development

Допустим есть директории /directory1/directory2/directory3/ и /directory4/ и в ней ссылка на directory2, т.е. путь будет такой: /directory4/link_to_directory2/directory3/

В directory3 есть makefile, в нём с помощью SOURCES = подключен файл includes.h, находящийся в этой же папке, с помощью которого инклудится файл, находящийся в directory4: #include "../../myfile"

Делаю make из /directory4/link_to_directory2/directory3/ но #include игнорирует ссылки (как команда pwd -P), в результате попадаем в directory1 вместо directory4.

Полный путь в инклудах задать не могу, т.к. не известно, где будет распологаться директории и как они будут называться.

Что-нибудь типа $(shell pwd) в includes.h не работает, т.к. это уже не makefile.

IOne
()

Как получить в makefile макро из .h файла?

Форум — Development

Допустим есть сишный .h файл:

#define MYMAKROS 10

Нужно в makefile получить значение этого макроса, в данном случае 10. Макрос может использоваться в сишном файле несколько раз, что создаёт дополнительные трудности для grep.

IOne
()

[vsftpd]Не логинятся локальные пользователи

Форум — Admin

Fedora 16, system-config-firewall отключен, SELinux тоже(в /etc/selinux/config прописано SELINUX=disabled и $ /usr/sbin/getenforce выдает Disabled).

Под анонимным пользователем заходит нормально, а под локальными пользователями - «ошибка регистрации пользователя». Локального пользователя, под которым я хочу зайти, нет в ftpusers и user_list.

Fedora 13 и 15 нормально работают с этим конфигом, а Fedora 16 - нет.

Конфиг: ftpusers

# Users that are not allowed to login via ftp
#root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

user_list

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
#root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

vsftpd.conf

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

 

IOne
()

Посылка сообщения LPD серверу принтера

Форум — Development

Есть принтер Epson Stylus Pro 4450, нужно написать для него драйвер для печати по сети из-под своей ОС. Принтер поддерживает LPD и RAW, командный язык ESC/P. Т.к. наша ОС не поддерживает RAW-сокеты, остаётся использовать его встроенный LPD сервер. Спецификация на LPD тут

Есть ли у кого-нибудь пример работы с LPD сервером на прямую без команды lpr?

Я правильно понимаю, вначале нужно дать команду Receive a printer job, затем Receive control file, потом передать управляющий файл, затем дать команду Receive data file, далее передать файл с данными и после команды Print any waiting jobs принтер должен начать печатать? И ещё, управляющий символ ESC/P можно передать, если указать в конфигурационном файле команду l?

Фрагмент кода, что-то не работает.

char outbuf[1024];
char inbuf[1024];
//команда Receive a printer job
outbuf[0]=2;
strcpy(outbuf+1,"PASSTHRU");
outbuf[9]=0x0a;
send(sockClient, outbuf, 10, 0);
n = recv(sockClient, inbuf, 1, 0);//подтверждение от принтера
printf("n=%i, inbuf1=%i\n", n, inbuf[0]);
memset(outbuf, 0, 1024);


//команда Receive control file
outbuf[0]=2;
outbuf[1]=11;
outbuf[2]=' ';
strcpy(outbuf+3,"cfA00190.0.0.23");//IP клиента 90.0.0.23
outbuf[18]=0x0a;
send(sockClient, outbuf, 19, 0);
n = recv(sockClient, inbuf, 1, 0);//подтверждение от принтера
printf("n=%i, inbuf2=%i\n", n, inbuf[0]);
memset(outbuf, 0, 1024);



//формируем и передаём управляющий файл
outbuf[0]='H';
strcpy(outbuf+1,"90.0.0.23");
outbuf[10]=0x0a;

outbuf[11]='P';
strcpy(outbuf+12,"root");
outbuf[16]=0x0a;

outbuf[17]='f';
strcpy(outbuf+18,"cfA00190.0.0.23");
outbuf[33]=0x0a;
outbuf[34]=0;
send(sockClient, outbuf, 35, 0);
n = recv(sockClient, inbuf, 1, 0);//подтверждение от принтера
printf("n=%i, inbuf3=%i\n", n, inbuf[0]);
memset(outbuf, 0, 1024);


//команда Receive data file
outbuf[0]=3;
outbuf[1]=11;
outbuf[2]=' ';
strcpy(outbuf+3,"dfA00190.0.0.23");
outbuf[18]=0x0a;
send(sockClient, outbuf, 19, 0);
n = recv(sockClient, inbuf, 1, 0);//подтверждение от принтера
printf("n=%i, inbuf4=%i\n", n, inbuf[0]);
memset(outbuf, 0, 1024);


//формируем и передаём файл с данными
strcpy(outbuf,"proverka");
//outbuf[9]=0x0a;
send(sockClient, outbuf, 10, 0);
n = recv(sockClient, inbuf, 1, 0);//подтверждение от принтера
printf("n=%i, inbuf5=%i\n", n, inbuf[0]);
memset(outbuf, 0, 1024);


//команда Print any waiting jobs
outbuf[0]=1;
strcpy(outbuf+1,"PASSTHRU");
outbuf[9]=0x0a;
send(sockClient, outbuf, 10, 0);
IOne
()

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