Kezdőlap › Fórumok › Programozás › „Csak guruknak” – konyhanyelven…
- This topic has 150 hozzászólás, 25 résztvevő, and was last updated 15 years, 8 months telt el by
uzsolt.
-
SzerzőBejegyzés
-
2006-12-09-12:42 #2081678Code:CFLAGS += -O3 -march=i686 -mmx `pkg-config –cflags pkg-x.x`
CLIBS += `pkg-config –libs pkg-x.x`sorok mire jók? Lekértem a pkg-config verziószámát (0.20), beírtam, nem találja (command not found). Viszont ha kikommentezem őket, akkor simán fordul (fordulni velül együtt is fordul, csak teleszemeteli az xtermet…). Kellenek ők valamire?
2006-12-09-18:37 #2081679„sorok mire szolgálnak?”
CFLAGS – fordítási flagek (szabványos változó)
paraméterek -O3 (3. szintű sebesség optimalizálás) -march=i686 (cpu) -mmmx (mmx engedélyezése) stb. (man gcc)
CLIBS – libek (szabványos változó)
pkg-config – program, mely a telepített libekről ad infót a .pc kiterjesztésű file-ok használatával (man pkg-config)2006-12-10-10:00 #2081680Kedvenc témám, hogy minden kezdő kernelt akar hekkelni, de legalább forgatni.
Hát, na most lehet…3. Még több gomb…
Hogyan dobjuk fel az ir-távirányítónkat…
Azért hozom elő pont ezt, mert egyszerű, nálam tökéletesen bevált és nem utolsó sorban már magyar vonatkozása is. (A hiv. kernelben is.)No, akkor lássuk az alapokat.
A linuksz képes a beviteli eszközöket „egy fajtaként kezelni” egy megkönnyíti a programok alkalmazását… hozzájuk.Lássuk milyen input eszközük van:
Code:júzer ~ $ cat /proc/bus/input/devices
I: Bus=0001 Vendor=0070 Product=3401 Version=0001
N: Name=”cx88 IR (Hauppauge WinTV 34xxx ”
P: Phys=pci-0000:00:0a.0/ir0
S: Sysfs=/class/input/input0
H: Handlers=kbd event0
B: EV=100003
B: KEY=100fc312 214a802 0 0 0 0 18000 41a8 4801 9e1680 0 0 10000ffcI: Bus=0003 Vendor=0458 Product=002e Version=0000
N: Name=”KYE NetScroll+ Traveler”
P: Phys=usb-0000:00:10.2-1.2/input0
S: Sysfs=/class/input/input1
H: Handlers=mouse0 event1
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name=”PC Speaker”
P: Phys=isa0061/input0
S: Sysfs=/class/input/input2
H: Handlers=kbd event2
B: EV=40001
B: SND=6I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name=”AT Translated Set 2 keyboard”
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input3
H: Handlers=kbd event3
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 f2ffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7júzer ~ $
Tehát van egy távirányítónk. (Persze, ha a ir chip támogatva van. V4l driver… erre vonatkozóan hosszú lenne itt infót adni… ott a doksi.)
Mit tudunk vele kezdeni?
A kernel struktúrában 3 könyvtárat kell megtekinteni hozzá:
linux/include/linux
linux/include/media
linux/drivers/media/common/irElőször is, az input.h tartalmazza a deffiniált billentyű kulcsokat pl:
Code:/*
* Keys and buttons
*/#define KEY_RESERVED 0
#define KEY_ESC 1
#define KEY_1 2
#define KEY_2 3
#define KEY_3 4
#define KEY_4 5
#define KEY_5 6
#define KEY_6 7
#define KEY_7 8Ha szerencsénk van, akkor a távirányítónk már félig meddig támogatott és csak ezekkel kell jáccani, mivel egyre több a támogatott irc, de sajnos a chippek álandóan változnak és az új távirányítók más kódokkal működnek…
Most vegyük azt, hogy a mi távirányítónk, alapból ismert, de nem megy tökéletesen.
Code:IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE] = {
/* Keys 0 to 9 */
[ 0x00 ] = KEY_0,
[ 0x01 ] = KEY_1,
[ 0x02 ] = KEY_2,
[ 0x03 ] = KEY_3,
[ 0x04 ] = KEY_4,
[ 0x05 ] = KEY_5,
[ 0x06 ] = KEY_6,
[ 0x07 ] = KEY_7,
[ 0x08 ] = KEY_8,
[ 0x09 ] = KEY_9,[ 0x0a ] = KEY_TEXT, /* keypad asterisk as well */
[ 0x0b ] = KEY_RED, /* red button */
[ 0x0c ] = KEY_RADIO,Ilyenek, mint a „KEY_1” biztosan működnek a kernelünkben. Ha a funkció jó helyen is van „[ 0x01 ]”, akkor használhatjuk, vagy kedvünkre átdeffiniálhatjuk – változtassuk meg a pl. „KEY_1”-et „KEY_F1”-re (az input.h alapján), ha azt szeretnénk, hogy az „1”-es gomb „F1” lenyomását jelentse.
Ha a kulcs nem jó helyen van pl. a „0” gomb az „1” gomb helyén van, akkor írjuk át a „[ 0x01 ]”-ot, vagy adjunk, más „KEY_”-t hozzá. Ebben az esetben előfordulhat, hogy kísérletezni is kell.
Pl.: a „KEY_RADIO” akkor sem biztos, hogy menni fog, ha jó helyen van. Adjunk hozzá egy ismert gombot – ami biztosan megy – pl.: „KEY_R”.Most jön a feketeleves!
Mi van, ha a chippünk támogatott, de nincs hozzá keymap deffiníciós struktúra… csinálunk egyet, majd beküldjük a kernel készítőknek. 😀
Hogy néz ki a struktúra:Code:#ifndef _IR_I2C
#define _IR_I2C#include
struct IR_i2c;
struct IR_i2c {
IR_KEYTAB_TYPE *ir_codes;
struct i2c_client c;
struct input_dev *input;
struct ir_input_state ir;/* Used to avoid fast repeating */
unsigned char old;struct work_struct work;
struct timer_list timer;
char phys[32];
int (*get_key)(struct IR_i2c*, u32*, u32*);
};int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw);
int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw);
#endifDeffiniáljuk a headerben:
Code:…
#define IR_KEYTAB_SIZE 128 // enougth for rc5, probably need more some day … (Ha több, mint 128 gombunk van, akkor ezt írjuk át :)))))
…
extern IR_KEYTAB_TYPE ir_codes_own[IR_KEYTAB_SIZE];Akkor térjünk vissza az ir-keymaps.c-hez.
Code:IR_KEYTAB_TYPE ir_codes_own[IR_KEYTAB_SIZE] = {
[ 0xXX ] = KEY_0, //’0′ / ‘enter’
[ 0xXX ] = KEY_1, //’1′Az XX számokat, megint csak nekünk kell kikísérleteznünk, vagy fellelni a guglin, vagy máshol.
Majd forgassunk kernelt. (Erről megint nem szólok.)
Nos ez volt a világ legegyszerűbb kernel hekkelése…
2006-12-16-18:04 #2081681Most csak ennyit írok: „unix trükkök”
2007-02-04-15:00 #2081682Felmerült többször a kérdés, hogy hogyan töltsünk le több sorszámmal ellátott file-t a netről, minnél kevesebb munkával. Nos itt egy példa:
Code:#!/bin/bash# Ha kész a script csak ezeket kell módosítani, részben, vagy egészében (akár paraméterként megadni)
AIS=”10″# „A” számsor kezdő értéke
AAS=”20″ # „A” számsor utolsó értéke
BIS=”1″# „B” számsor kezdő értéke
BAS=”5″# „B” számsor utolsó értéke
URL=”http://…”
FILE=”${AAAA}_${B}”
EXT=”…”A=${AIS}
while test $[A] -le ${AAS}
do
AAAA=`printf „%04d” $A` # „A” számsor mindig 4 karakteres (0 elől)
B=${BIS}
wget -c ${URL}/${FILE}.${EXT} # Kísérlet az első file letöltésére (ha félbeszakadt folytatja)
if [[ -s ${URL}/${FILE}.${EXT} ]]
then
# Ha sikerült, akkor jöhet a többi
B=$[$[B]+1]
while test $[B] -le ${BAS}
do
wget -c ${URL}/${FILE}.${EXT} # (ha félbeszakadt folytatás)
B=$[$[B]+1]
done
else
# Csak akkor szükséges, ha a wget-nél használjuk az „-O” paramétert (most épp nem használtam, de ez a sor senkit nem zavar)
rm ${URL}/${FILE}.${EXT}
fi
A=$[$[A]+1]
doneEgészségetekre!
Picit módosítottam rajta, mert a linkeket többször kellett beírni. Most már csak egyszer, így rugalmasabb lett.
2007-02-04-18:57 #2081683Köszi vizsla, nagyon tetszik a topic. Ha majd eszembe jut valami én is megosztom, bár kétlem, hogy hasonlóan hasznos dolgokról tudnék írni.
2007-02-05-15:10 #2081684A seq parancs is hasznos lehet ilyen esetekben, sőt, szerintem sokszor egyszerűbb is…
2007-02-11-13:12 #20816852007-02-12-01:29 #2081686ds wrote:curl http://example.com/article%5B000-100%5D/file%5B0-10%5D.pdfEz a link nem létezik. Szerintem hibásan adtad meg.
2007-02-12-05:55 #2081687l_lorincz wrote:ds wrote:curl http://example.com/article%5B000-100%5D/file%5B0-10%5D.pdfEz a link nem létezik. Szerintem hibásan adtad meg.
A szmájli nem létezik. Szerintem hibásan adtad meg. 🙂
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz