|
|
|
Железный канал: «LPC bus I/O под linux» |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Цитата: |
Что ещё тут можно почикать чтоб какможно ближе к трём командам процессора продвинуться?
|
Код: |
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdint.h>
int main()
{
int file;
uint8_t GP4;
file = open("/dev/port", O_RDWR | O_RSYNC | O_SYNC);
lseek(file, 0x68F, SEEK_SET);
write(file, 0x03, 1);
close(file);
} |
например выкинуть функцию Outport и написать ее в код самого main
добавлено спустя 4 минуты:
Еще можно поискать вызываемые функции, например write, в указанных заголовочных файлах и написать в теле main ее код.
Хотя, наверное это ничего не даст.
Можно так же попробовать сделать ассемблерную вставку, но тут я на неизведанной территории.
добавлено спустя 3 минуты:
Вот тут помеченный галочкой ответ, похоже на твой случай:
https://ru.stackoverflow.com/questions/829868/Ассемблерная-вставка-в-Си
Читать полностью.
_________________ Сосиска в хлебе
Последний раз редактировалось: БулерМэн (22:27 13-02-2019), всего редактировалось 6 раз(а) |
|
|
_RAZAAR_
62 EGP
  Рейтинг канала: 2(11) Репутация: -13 Сообщения: 2854 Заблокирован Откуда: РАЗААРЪ - 40Лы от Лаве Зарегистрирован: 15.04.2008
 |
|
БулерМэн : |
Цитата: |
Что ещё тут можно почикать чтоб какможно ближе к трём командам процессора продвинуться?
|
Cкрытый текст (кликните здесь для просмотра)
Код: |
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdint.h>
int main()
{
int file;
uint8_t GP4;
file = open("/dev/port", O_RDWR | O_RSYNC | O_SYNC);
lseek(file, 0x68F, SEEK_SET);
write(file, 0x03, 1);
close(file);
} |
|
например выкинуть функцию Outport и написать ее в код самого main
.
|
K сожалению либо нельзя либо чтото с синтаксисом
Cкрытый текст (кликните здесь для просмотра)
root@nar1gw1 ~/pm# cc GP4Out_03h_less.c
GP4Out_03h_less.c: In function 'main':
GP4Out_03h_less.c:16:17: warning: passing argument 2 of 'write' makes pointer from integer without a cast
write(file, 0x03, 1);
^
In file included from GP4Out_03h_less.c:5:0:
/usr/include/unistd.h:366:16: note: expected 'const void *' but argument is of type 'int'
extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur;
|
_________________ Quaere Vērum
------------------------ |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
_RAZAAR_ : |
При загрузке чего?
Загрузке загрузчика ОС?
|
При загрузке всей ОС со всеми службами.
Ну или хотя бы udev.
_________________ Люблю свободный полёт... :) |
|
|
_RAZAAR_
62 EGP
  Рейтинг канала: 2(11) Репутация: -13 Сообщения: 2854 Заблокирован Откуда: РАЗААРЪ - 40Лы от Лаве Зарегистрирован: 15.04.2008
 |
|
AnrDaemon : |
_RAZAAR_ : |
При загрузке чего?
Загрузке загрузчика ОС?
|
При загрузке всей ОС со всеми службами.
Ну или хотя бы udev.
|
Понятное дело если это применяется для чегото столь важного как загрузка оси.
Про костылёк я имел в виду касательно нашего случая
когда после загрузки всей системы чтобы активировать вайфай таким образом как мы тут его активировали
БулерМен предложил выгрузить драйвер вайфай пустить включалку а потом заново загрузить драйвер, посредствам скрипта.
Когда надо происзвести действия на 3 команды CPU зачем должны быть использованы какието более сложные манимупяции чем эти 3 команды, я об этом хотел сказать.
_________________ Quaere Vērum
------------------------ |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
_RAZAAR_ : |
Про костылёк я имел в виду касательно нашего случая
|
Инициализация КАЖДОГО устройства - такой же точно "костылёк".
_________________ Люблю свободный полёт... :) |
|
|
_RAZAAR_
62 EGP
  Рейтинг канала: 2(11) Репутация: -13 Сообщения: 2854 Заблокирован Откуда: РАЗААРЪ - 40Лы от Лаве Зарегистрирован: 15.04.2008
 |
|
AnrDaemon : |
_RAZAAR_ : |
Про костылёк я имел в виду касательно нашего случая
|
Инициализация КАЖДОГО устройства - такой же точно "костылёк".
|
Понятно и непонятно, a почему такойже точно "костылёк"?
Разве это не сделано для того чтоб можно было пользоваться устройствами вообще? или "костылёк" в шуточном смысле?
Тогда мой вопрос возвращается опять, как то возможно костыльнуть включалкой до загрузки iwlwifi драйвера?
Я незнаю механизмов и приоритетов по которым инициализируются устройства в линуксах , чтоб не как попало выгружать драйвер затем грузить его вновь а если есть такая возможность по необходимому мне порядку.
гугальну может что и накопаю.
Еслиб были извесны точно причины почему оставили эту включалку без внимания под линуксом, недоработка драйвера или он не должен заниматься проверкой причин того что адаптер есть интерфейс есть но хардлок свич в положении отключено, драйвер этот факт устанавливает но больше этот факт код драйвера не волнует и применением мер по разблокировке пусть занимается ктото другой или чтото другое, какието сторонние RFKILL неработающие с этим мостом итд итп
lspci прекрасно показывал и показывает тип ISA LPC мостa и причин думать о том что это редко используемый неизвесный чип с которым непонятно как общаться вроде нет.
_________________ Quaere Vērum
------------------------
Последний раз редактировалось: _RAZAAR_ (18:13 14-02-2019), всего редактировалось 1 раз |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
А так работает?
Код: |
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdint.h>
int main()
{
int file;
uint8_t value = 0x03;// или все таки *value
file = open("/dev/port", O_RDWR | O_RSYNC | O_SYNC);
lseek(file, 0x68F, SEEK_SET);
write(file, &value, 1);
close(file);
} |
Я тут не совсем понимаю, у функции write вторым аргументом - указатель на данные, но в вызове функции стоит 0x03 или просто число 3.
_________________ Сосиска в хлебе
Последний раз редактировалось: БулерМэн (03:15 15-02-2019), всего редактировалось 2 раз(а) |
|
|
_RAZAAR_
62 EGP
  Рейтинг канала: 2(11) Репутация: -13 Сообщения: 2854 Заблокирован Откуда: РАЗААРЪ - 40Лы от Лаве Зарегистрирован: 15.04.2008
 |
|
БулерМэн : |
А так работает?
Код: |
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdint.h>
int main()
{
int file;
uint8_t value = 0x03;// или все таки *value
file = open("/dev/port", O_RDWR | O_RSYNC | O_SYNC);
lseek(file, 0x68F, SEEK_SET);
write(file, &value, 1);
close(file);
} |
Я тут не совсем понимаю, у функции write вторым аргументом - указатель на данные, но в вызове функции стоит 0x03 или просто число 3.
|
Так работает
интересно почему нельзя указывать без декларирования
не так
write(file, &value, 1);
а так
write(file, 0х03, 1);
_________________ Quaere Vērum
------------------------
Последний раз редактировалось: _RAZAAR_ (12:33 15-02-2019), всего редактировалось 1 раз |
|
|
VBKesha
817 EGP
      Рейтинг канала: 7(600) Репутация: 132 Сообщения: 3330 Откуда: обл.Брянская г. Трубчевск Зарегистрирован: 07.12.2005
 |
|
_RAZAAR_ : |
интересно почему нельзя указывать без декларирования
не так
write(file, &value, 1);
а так
write(file, 0х03, 1);
|
Потому что & в данном случае, это взятие адреса переменной. А когда говоришь просто 0x03 ту write пытается искать данные по адресу 0x03 а что там лежит и можно ли по этому адресу читать, это вопрос.
добавлено спустя 13 минут:
БулерМэн : |
Можно так же попробовать сделать ассемблерную вставку, но тут я на неизведанной территории.
|
Это ничего не даст. Команды OUT/IN являются привилегированными, их вызов из 3 кольца(там где работает софт, а ось работает в 0) запрещен. Если вариант открыть доступ к нужному диапазону, но под виндой это может сделать только код в 0 кольце(драйвер например кстати Ntport ставит свой драйвер). В линуксе с рутовыми правами тоже можно открыть но только от рута
http://www.linuxcenter.ru/lib/articles/programming/io_port_prog_minihowto.phtml#AEN47
_________________ JumpGate. Quantar Optimus.
Jumpgate(TM) . . . welcome to your next life . . . There's nothing you can't do
Последний раз редактировалось: VBKesha (15:09 15-02-2019), всего редактировалось 1 раз |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
_RAZAAR_ : |
"костылёк" в шуточном смысле?
|
Никаких шуток. В *NIX 90% устройств инициализируются скриптами.
udev - всего лишь платформа для их вызова.
_________________ Люблю свободный полёт... :) |
|
|
_RAZAAR_
62 EGP
  Рейтинг канала: 2(11) Репутация: -13 Сообщения: 2854 Заблокирован Откуда: РАЗААРЪ - 40Лы от Лаве Зарегистрирован: 15.04.2008
 |
|
пока от незнания что с ним дальше делать все регистры показать
Cкрытый текст (кликните здесь для просмотра)
root@nar1gw1 ~/pm# ./a.out
_LPC47N227 Super I/O with LPC Interface HW info_
Runtime Register Block Address - 0x68
PME_STS_port_0x680h - 0x00
PME_EN_port_0x681h - 0x00
PME_STS1_port_0x682h - 0xF9
PME_STS2_port_0x683h - 0x07
PME_STS3_port_0x684h - 0xFF
PME_EN1_port_0x685h - 0x00
PME_EN2_port_0x666h - 0x00
PME_EN3_port_0x687h - 0x00
SMI_STS1_port_0x688h - 0xF9
SMI_STS2_port_0x689h - 0x09
SMI_EN1_port_0x68Ah - 0x00
SMI_EN2_port_0x68Bh - 0x00
GP1_port_0x68Ch - 0xF9
GP2_port_0x68Dh - 0x01
GP3_port_0x68Eh - 0x0F
GP4_port_0x68Fh - 0x03
FDC Power/Valid Config Cycle - 0x20
bit[7]=1 0x9C - PP Power/Mode/CR Lock - 0x94
bit[7]=0 0x08 - UART 1,2 Power - 0x88
FDC Miscellaneous - 0x70
PP and UART Miscellaneous - 0x00
FDC Setup - 0x00
Drive Type ID - 0xFF
bit[7:4]=0 - Auto Power Mgt/Boot Drive Select - 0x00
CR08 - 0x00
Test 4 - 0x00
bit[7:6]=0 - ECP FIFO Threshold/IR MUX - 0x00
Drive Rate - 0x00
UART Mode - 0x06
0x5A - Device ID - 0x5A
Revision - Revision ID - 0x00
Test 1 - 0x00
Test 2 - 0x00
Test 3 - 0x00
SYSOPT=0:0x2E SYSOPT=1:0x4E - Configuration Base Address 0 - 0x2E
SYSOPT=0:0x00 SYSOPT=1:0x00 - Configuration Base Address 1 - 0x00
DSR Shadow - 0x02
UART1 FCR Shadow - 0x00
UART2 FCR Shadow - 0x00
Force FDD Status Change - 0x03
CR18 - 0x00
CR19 - 0x00
CR1A - 0x00
CR1B - 0x00
CR1C - 0x00
CR1D - 0x00
CR1E - 0x00
Drive Type - 0x00
FDC Base Address - 0x00
FDC on PP/EPP Timeout S - 0x00
ECP Software Select - 0x00
Parallel Port Base Address - 0xDE
UART1 Base Address - 0xFE
UART2 Base Address - 0xBE
FDC and PP DMA Select - 0x04
FDC and PP IRQ Select - 0x07
UART IRQ Select - 0x43
IRQIN1/HPMODE/SIRQ_CLKRUN_En - 0x80
IRQIN2 - 0x00
SCE (FIR) Base Address - 0x00
SCE (FIR) DMA Select - 0x00
IR Half Duplex Timeout - 0x03
Software Select A - 0x00
Software Select B - 0x00
GPIO Direction Register 1 - 0x00
GPIO Polarity Register 1 - 0x00
GPIO Direction Register 2 - 0x00
GPIO Polarity Register 2 - 0x00
GPIO Direction Register 3 - 0x78
GPIO Polarity Register 3 - 0x00
GPIO Direction Register 4 - 0xFD
GPIO Polarity Register 4 - 0x00
GPIO Output Type Register - 0x80
|
_________________ Quaere Vērum
------------------------ |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Так а что тебе с ним нужно делать-то? Машинка работает, в сеть выходит.
Про гитхаб тебе правильно посоветовали - через месяц забудешь где исходник программы пылится и вообще как оно и где запускается - поэтому необходимо написать инструкцию по сборке и эксплуатации данного решения.
В твоей теме, начиная с самого вопроса уже прошло 5 страниц текста, как-то бы надо резюмировать в сжатой форме, в одном сообщении
добавлено спустя 1 минуту:
ЗЫ Конкретное решение вопроса поместить лучше в первое сообщение темы, под спойлер.
_________________ Сосиска в хлебе
Последний раз редактировалось: БулерМэн (17:47 16-02-2019), всего редактировалось 2 раз(а) |
|
|
VBKesha
817 EGP
      Рейтинг канала: 7(600) Репутация: 132 Сообщения: 3330 Откуда: обл.Брянская г. Трубчевск Зарегистрирован: 07.12.2005
 |
|
ИМХО алгоритм работы должен быть такой.
0(опционально). Выгружаем драйвер WiFi(в линуксе команда rmmod имя_модуля) Имя модуля нужно глянуть конкретно для твоего модуля.
1. Вычиатать конфиг регистры и запомнить куда именно настроен
Runtime Register Block Address
2. Если он настроен на диапазон меньше 10h(тоесть не настрое) то меняем на диапазон выше 68h, если настроен то запоминаем на что именно настроен(поменяешь биос а он зараза начнём на другой порт мапить)
3. Настраиваем направление порта чтобы выходы были выходами а входы входами(можно даже не вычитываея)
4. Записываем в регистр который запомнили на втором шаге, значения активации Wi-Fi.
5(опционально). Загружаем назад модуль вайфай (команда modprobe имя_модуля).
ИМХО именно такая последовательность будет верной.
PS. Можно добавить спец ключи, для активации деактивации Wi-Fi
PSS. Добавить активацию деактивацию всего остльного BT/GPS/3G
_________________ JumpGate. Quantar Optimus.
Jumpgate(TM) . . . welcome to your next life . . . There's nothing you can't do |
|
|
|
|
|
Железный канал: «LPC bus I/O под linux» |
|