Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Веб сервер
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Zelepuk
Имеется ARM9 с Debian Linux на борту. Всё функционирует отлично.
Хочется создать страницу, которая отображала бы значение некоторой переменной(например с АЦП) и позволяла бы по нажатию на странице кнопки менять логическое состояние GPIO на ARM9.
Подскажите как реализуются подобные вещи.
С линуксом знаком поверхностно, с веб не работал вообще. laughing.gif
Незнаю откуда зайти
Idle
1. сервер - apache/встроенный в busybox/google 'embedded http server'
2. "выполнялка скриптов" - php/haserl/самописный бинарник/google 'embedded php'
3. скрипт на языке этой выполнялки, который выполняет нужные действия и генерирует html
kolobok0
Цитата(Zelepuk @ Jan 10 2012, 12:48) *
.. Подскажите как реализуются подобные вещи...Незнаю откуда зайти


с зади sm.gif))

1) вы должны чётко понимать что должен получить броузер клиента (явно написанный текст в HTML).
2) необходимо научить скрипт отрабатывающий на стороне сервака генерить необходимый HTML в зависимости от переменных сервака.
3) провести локальные переменные сервака до скрипта работающего на сервере.

например.
вы хотите подсветить в зависимости от даты некий текст на страничке.
1) смотрим как меняется цвет в HTML
2) находим место и вставляем в скрипт (как пример php) HTML код который должен высылаться клиенту.
3) смотрим реализацию функции типа гэт дата локально на сервере самим пых-пых...

удачи вам
(круглый)
Zelepuk
нужно вот что:
1) вывести некую цифру, отображающую значение переменной.
2) кнопочка, по нажатии которой зажигается лампочка
uriy
Изучите что такое cgi. cgi скрипты обычно находятся в папке cgi-bin вебсервера. Для работы скриптов с железом пишите программу на си. помещаете ее в папку cgi-bin. Из броузера методом get или post отправляете запросы в ваш cgi скрипт. Они туда приходят так же как если бы вы запускали эту программу из консоли с параметрами. Параметры и есть ваш запрос из броузера. В ответ скрипт выдает инфу, делает это обычным printf ом.
Я использовал вебвервер boa. давно не поддерживается, но мне был нужен под ucLinux. Сделано управление/чтение пинов, обвноление ПО, запись параметров в файл.
am1808
да что вы парню голову морочите и усложняете ему задачу biggrin.gif

на си пишешь простой сервер, который слушает 80 порт,
по GET || POST запросу от броузера вываливаешь ему (клиенту, тобишь броузеру) необходимые значения переменных, в виде простейшего html, вот и все решение( 100-150 строк кода )
Zelepuk
Цитата(am1808 @ Jan 10 2012, 19:40) *
да что вы парню голову морочите и усложняете ему задачу biggrin.gif

на си пишешь простой сервер, который слушает 80 порт,
по GET || POST запросу от броузера вываливаешь ему (клиенту, тобишь броузеру) необходимые значения переменных, в виде простейшего html, вот и все решение( 100-150 строк кода )


можете немного подробнее, пока что сложновато звучит

Цитата(uriy @ Jan 10 2012, 18:06) *
Изучите что такое cgi. cgi скрипты обычно находятся в папке cgi-bin вебсервера. Для работы скриптов с железом пишите программу на си. помещаете ее в папку cgi-bin. Из броузера методом get или post отправляете запросы в ваш cgi скрипт. Они туда приходят так же как если бы вы запускали эту программу из консоли с параметрами. Параметры и есть ваш запрос из броузера. В ответ скрипт выдает инфу, делает это обычным printf ом.
Я использовал вебвервер boa. давно не поддерживается, но мне был нужен под ucLinux. Сделано управление/чтение пинов, обвноление ПО, запись параметров в файл.


вот тут более подробно, если я правильно понял, вы имеете ввиду шлюз.
am1808
Цитата(Zelepuk @ Jan 10 2012, 20:58) *
можете немного подробнее, пока что сложновато звучит


например, посмотрите вот тут
http://www.paulgriffiths.net/program/c/webserv.php

или гуглите "simple web server on c"

Цитата(Zelepuk @ Jan 10 2012, 20:58) *
вот тут более подробно, если я правильно понял, вы имеете ввиду шлюз.

тут имеется ввиду какой либо веб-сервер
Zelepuk
Цитата(am1808 @ Jan 10 2012, 21:01) *
например, посмотрите вот тут
http://www.paulgriffiths.net/program/c/webserv.php

или гуглите "simple web server on c"


тут имеется ввиду какой либо веб-сервер

а если у меня уже стоит Apache? так наверное и придётся php курить...
am1808
Цитата(Zelepuk @ Jan 10 2012, 23:56) *
а если у меня уже стоит Apache? так наверное и придётся php курить...

вы же сами написали что вам нужно:

Цитата(Zelepuk @ Jan 10 2012, 23:56) *
нужно вот что:
1) вывести некую цифру, отображающую значение переменной.
2) кнопочка, по нажатии которой зажигается лампочка"


отсюда вывод такой: проще написать самописный серверок под ваши нужды, из которого вы "более проще достучитесь до системы"

а выбирать как делать, смотрите сами, как именно вам проще
sasamy
Цитата(am1808 @ Jan 11 2012, 08:58) *
отсюда вывод такой: проще написать самописный серверок под ваши нужды, из которого вы "более проще достучитесь до системы"
а выбирать как делать, смотрите сами, как именно вам проще


До GPIO как раз проще достучаться из шелла и haserl который тут уже советовали очень удобен, вот пример из CGI:

Код
<% if test "$FORM_system" = "audio_on"; then %>
<% echo "1" > /sys/class/gpio/gpio50/value %>
<% fi %>

<% if test "$FORM_system" = "audio_off"; then %>
<% echo "0" > /sys/class/gpio/gpio50/value %>
<% fi %>

am1808
Цитата(sasamy @ Jan 11 2012, 13:42) *
До GPIO как раз проще достучаться из шелла и haserl который тут уже советовали очень удобен, вот пример из CGI:

Код
<% if test "$FORM_system" = "audio_on"; then %>
<% echo "1" > /sys/class/gpio/gpio50/value %>
<% fi %>

<% if test "$FORM_system" = "audio_off"; then %>
<% echo "0" > /sys/class/gpio/gpio50/value %>
<% fi %>

ну для этого ему еще надо ядро пересобрать(если этот интерфей не поддерживается у него), во - первых, во - вторых, да, с GPIO, так же как и с /proc без разницы как работать(так же как и с любым другим файлом), при условии, если ему нужно вывалить клиенту какую то текущую инфу из файла или записать что то в файл.
ну а если ему значения переменных выводить, то тут ему нужно каким-то образом, опять же, например, через файлы взаимодействовать, или же, через тот же /proc, /sysfs, если у него работает какой-то модуль, или, чтобы узнать внутренние значения переменных из модуля.
опять же, веб сервер сконфигурить надо, ему придется разбраться с тем же cgi, php и прочей лабудой, времени он потратит больше, нежели, чем он напишет простой серверок с использованием сокетов за пару часов, не забивая голову лишним, и просто и легко выплюнет клиенту необходимую системную инфу или подергает ножками на GPIO.
sasamy
Цитата(am1808 @ Jan 11 2012, 14:01) *
опять же, веб сервер сконфигурить надо, ему придется разбраться с тем же cgi, php и прочей лабудой, времени он потратит больше, нежели, чем он напишет простой серверок с использованием сокетов за пару часов, не забивая голову лишним


PHP тут не нужен а с html ознакомиться в любом случае придется. Писать сервак хоть и простой в то время как существуют готовые решения глупо - это сейчас нужно одну переменную вывести а потом развивать систему попросту умаешься, правда я не понял про какие переменные идет речь. Для GPIO если не использовать стандартный интерфейс sysfs нужно мапить регистры переиферии в юзерспейс, при этом фактически нужно давать доступ программе ко всей физической памяти системы (/dev/mem), выставлять эту возможность в Интеренет - это вообще безумие.
uriy
Цитата
опять же, веб сервер сконфигурить надо, ему придется разбраться с тем же cgi, php и прочей лабудой, времени он потратит больше, нежели, чем он напишет простой серверок с использованием сокетов за пару часов, не забивая голову лишним, и просто и легко выплюнет клиенту необходимую системную инфу или подергает ножками на GPIO.
Чушь я не верю что вы сможете написать вебсервер с поддержкой cgi и выдачей картинок даже за месяц! У автора уже есть готовый Apache, все настройки можно оставить по дефолту. Использовать php для доступа к железу на мой взгляд крайне не удачная затея.

Цитата
ну для этого ему еще надо ядро пересобрать(если этот интерфей не поддерживается у него)
Думаю Apache по дефолту поддерживает shell скрипты и другие исполняемы файлы. Если и не поддерживает то ядро точно пересобирать не надо, надо будет лишь сам сервер перекомпилить.
am1808
Цитата(uriy @ Jan 11 2012, 17:30) *
Чушь я не верю что вы сможете написать вебсервер с поддержкой cgi и выдачей картинок даже за месяц! У автора уже есть готовый Apache, все настройки можно оставить по дефолту. Использовать php для доступа к железу на мой взгляд крайне не удачная затея.

я вам за день такой сервер напишу, это так, к слову.
почитайте про socket Berkley, для вашего же блага, это два
cgi не нужен - это три

Цитата(uriy @ Jan 11 2012, 17:30) *
Думаю Apache по дефолту поддерживает shell скрипты и другие исполняемы файлы. Если и не поддерживает то ядро точно пересобирать не надо, надо будет лишь сам сервер перекомпилить.

ядро и апач никак не связаны по большому счету,
ядро, я упоминал, необходимо пересобрать для поддержки /sys/class/gpio для работы из userspace

Цитата(sasamy @ Jan 11 2012, 14:37) *
Для GPIO если не использовать стандартный интерфейс sysfs нужно мапить регистры переиферии в юзерспейс, при этом фактически нужно давать доступ программе ко всей физической памяти системы (/dev/mem), выставлять эту возможность в Интеренет - это вообще безумие.

есть модули ядра, ТС правильнее под его задачи написать драйвер и взаимодействовать из юсерспейса(из сервера) с этим модулем.
конечно, только безумный будет мапить физ. память из юсерспейса
uriy
Цитата
я вам за день такой сервер напишу, это так, к слову.
Я вас за язык не тянул. Жду от вас сервер. Дам вам больше времени, к понедельнику, свое мыло кину вам в личку.
am1808
Цитата(uriy @ Jan 11 2012, 22:18) *
Я вас за язык не тянул. Жду от вас сервер. Дам вам больше времени, к понедельнику, свое мыло кину вам в личку.

я за бесплатно не нанимался
sasamy
Цитата(am1808 @ Jan 11 2012, 18:31) *
ядро, я упоминал, необходимо пересобрать для поддержки /sys/class/gpio для работы из userspace
есть модули ядра, ТС правильнее под его задачи написать драйвер и взаимодействовать из юсерспейса(из сервера) с этим модулем.
конечно, только безумный будет мапить физ. память из юсерспейса


Написание собственных модулей для экспорта ф-ций GPIO считается deprecated с того момента как появился стандартный интерфейс в sysfs, так что тут с точнойстью до наоборот насчет правильности. Для АЦП лучше всего написать модуль с поддержкой стандартного интерфейса sensors
http://lm-sensors.org/wiki/ProjectInformation
Писать собственные костыли для веба на С - вообще даже не обсуждается - это совершенно неправильно по всем пунктам и можно порекомендовать только в качестве тренировочной задачи при изучении сетевого программирования.
am1808
Цитата(sasamy @ Jan 11 2012, 22:29) *
Писать собственные костыли для веба на С - вообще даже не обсуждается - это совершенно неправильно по всем пунктам и можно порекомендовать только в качестве тренировочной задачи при изучении сетевого программирования.

это вы сами придумали? задачи бывают разными

Цитата(sasamy @ Jan 11 2012, 22:29) *
Написание собственных модулей для экспорта ф-ций GPIO считается deprecated с того момента как появился стандартный интерфейс в sysfs, так что тут с точнойстью до наоборот насчет правильности.

я имел ввиду не то, что вы выше написали,
я говорил про функционал, реализующий драйвер, который как бе может заюзать тот же sysfs
sasamy
Цитата(am1808 @ Jan 11 2012, 22:40) *
это вы сами придумали? задачи бывают разными


С удовольствием послушаю про задачу в которой лучше написать свой костыль.
uriy
Я думаю уже все поняли что am1808 не способен написан вебсервер ни за два часа, ни за день. И вряд ли найдется глупец который ему будет платить за непонятно что, когда есть куча бесплатных вебсерверов.
Zelepuk изучите как работает cgi, разберитесь с html (потом с javascript, css и ajax). Примеры cgi скриптов наверняка уже есть в Apache. Для работы с cgi я использовал готовую библиотечку (в моем uclinux она называется cgihtml). Эта библиотека проверяла валидность данных и выдала массив состоящий из полей - имя поля:значение. Можно посмотреть какие пакеты ходят по сети с помощью программы Wireshark.
Idle
Цитата(uriy @ Jan 12 2012, 08:08) *
Я думаю уже все поняли что am1808 не способен написан вебсервер ни за два часа, ни за день.

я не понял. его можно за день написать http://stackoverflow.com/questions/176409/...ttp-server-in-c
am1808
Цитата(uriy @ Jan 12 2012, 09:08) *
Я думаю уже все поняли что am1808 не способен написан вебсервер ни за два часа, ни за день. И вряд ли найдется глупец который ему будет платить за непонятно что, когда есть куча бесплатных вебсерверов.

на понт не бери, утром деньги - вечером стулья
sasamy
Цитата(Idle @ Jan 12 2012, 10:06) *
я не понял. его можно за день написать http://stackoverflow.com/questions/176409/...ttp-server-in-c


Ну и зачем это нужно ? я и на ассемблере писал когда делать нечего было sm.gif если уж так нужен встраиваемый веб-сервер на С, все равно проще и надежней взять готовое решение, например:
http://www.gnu.org/software/libmicrohttpd/

Idle
Цитата(sasamy @ Jan 12 2012, 09:58) *
Ну и зачем это нужно ?

так и не нужно, apache+php пусть ставит
uriy
Не надо php! Для cgi нужен си и shell с ними работать с железом будет гораздо удобней.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.