„Csak guruknak” – konyhanyelven…

Kezdőlap Fórumok Programozás „Csak guruknak” – konyhanyelven…

10 bejegyzés megtekintése - 11-20 / 151
  • Szerző
    Bejegyzés
  • #2081678
    Wait
    Felhasználó
      Code:
      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?

      #2081679
      pointux
      Felhasználó

        „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)

        #2081680
        pointux
        Felhasználó

          Kedvenc 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 10000ffc

          I: 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=103

          I: 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=6

          I: 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=7

          jú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/ir

          Elő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 8

          Ha 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);
          #endif

          Deffiniá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…

          #2081681
          pointux
          Felhasználó

            Most csak ennyit írok: „unix trükkök”

            #2081682
            pointux
            Felhasználó

              Felmerü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]
              done

              Egészségetekre!

              Picit módosítottam rajta, mert a linkeket többször kellett beírni. Most már csak egyszer, így rugalmasabb lett.

              #2081683
              jzombi
              Felhasználó

                Kö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.

                #2081684
                uzsolt
                Felhasználó

                  A seq parancs is hasznos lehet ilyen esetekben, sőt, szerintem sokszor egyszerűbb is…

                  #2081685
                  ds
                  Felhasználó
                    #2081686
                    l_lorincz
                    Felhasználó
                      ds wrote:
                      curl http://example.com/article%5B000-100%5D/file%5B0-10%5D.pdf

                      Ez a link nem létezik. Szerintem hibásan adtad meg.

                      #2081687
                      pointux
                      Felhasználó
                        l_lorincz wrote:
                        ds wrote:
                        curl http://example.com/article%5B000-100%5D/file%5B0-10%5D.pdf

                        Ez a link nem létezik. Szerintem hibásan adtad meg.

                        A szmájli nem létezik. Szerintem hibásan adtad meg. 🙂

                      10 bejegyzés megtekintése - 11-20 / 151
                      • Be kell jelentkezni a hozzászóláshoz.