Edytowanie Kodu linuxa

JP
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad rok
  • Postów:16
1

Mam pytanie, jak mogę edytować kod linuxa, by coś do niego dodać?
Z góry dziękuje

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
4

Możesz pobrać kod całego linuksa, zmienić i skompilować, ale prawdopodobnie chodzi ci o coś innego. Co chcesz dodać?


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 2 godziny
  • Postów:1431
0

Możesz spróbować ogarnąć Linux from Scratch, jeśli polegniesz to znaczy, że to co chcesz zrobić jest poza zasięgiem Twoich możliwości.

PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
8

Jak wyżej - co konkretnie chcesz zrobić? Dodać obsługę drukarki? Zmienić wygląd okienek? Samo jądro Linuksa robi bardzo dużo różnych rzeczy. A do tego środowiska graficzne, np. KDE SC robią kolejny pierdyliard rzeczy, ale są niezależne od jądra.
Pytanie dotyczy obszernego tematu. To tak jakbym zapytał "Jak mogę dodać coś do samochodu?". No ale do coś silnika, kierownicy, bagażnika, klimatyzację, radio?
To może przykład. "Linux" często jest utożsamiany z dystrybucją, np. Ubuntu, Fedora. Taka Fedora dzieli się na jądro GNU Linux + środowisko graficzne + programy typu binutils. Zatem jeśli chcę:

  • dodać obsługę sprzętu, piszę sterownik,
  • dodać obsługę procesora, dopisuję instrukcje do jądra,
  • dodać logowanie domenowe do okienka logowania, dopisuję obsługę do KDM, co jest częścią KDE SC,
  • dodać możliwość kompilowania programu na ARM, dopisuję funkcję do GCC.

Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
edytowany 2x, ostatnio: PerlMonk
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Najszybciej zrobisz to uzywajac edytora hexadecymalnego, najlepiej z disassemblerem. Musisz znac tylko miejsce modyfikacji.

Chcesz zmienic sposob bootowania, jadro, sterownik czy jakis konkretny proces w systemie?

WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 8 godzin
  • Postów:5109
1

widzę że potrzeba kogoś, kto się zna na maintainowaniu kernela linuxa, bo ci nasi linuksiarze (@PerlMonk) z 4p to pewnie nawet nie kompilują jądra co każdy release

Kopiuj
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.12.tar.xz

unxz -v linux-5.12.tar.xz

tar -xvf linux-512.tar

cd linux-5.12

cp -v /boot/config-$(uname -r) .config

sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

sudo apt-get install yum

sudo yum install ncurses-devel bison flex elfutils-libelf-devel openssl-devel

make menuconfig

make

te libki do instalacji to w tutorialu znalazłem, nie wiem czy są bezpieczne

edytowany 1x, ostatnio: WeiXiao
PerlMonk
Te, Chińczyk! Uważaj, bo cię zgłoszę i prosiak ci posta skasuje! :P
WeiXiao
@PerlMonk: jak na razie jako jedyny w tym wątku wrzuciłem kod :P
PerlMonk
Pff, porno z kucykami wrzuć jak jesteś taki odważny :D
somekind
To są "nietuzinkowe tematy", a nie dział jakiegoś języka, tu się nie wrzuca kodu pod groźbą bana.
Szalony Programista
Szalony Programista
Wypadało by jeszcze przekopiować te jądro do /boot folderu i uaktualnić wpis w bootloaderze.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Kurde, musze przyznac ze choc siedze na codzien na linuchu to ostatnio kompilowalem jadro jeszcze w poprzednim stuleciu.

Zobacz pozostałe 7 komentarzy
vpiotr
Można to robić jednocześnie, zwłaszcza na słabszym sprzęcie.
somekind
Kopulacja, kompilacja, w porządku, ale z tym psem to żeś przesadził.
jarekr000000
Kiedyś kompilowałem. Całymi dniami czytałem o opcjach i potem kompilowałem jądro idealnie dopasowane do sprzętu i zastosowań - stargetowane na procesor, wywalone wszystkie niepotrzebne moduły itd. A później mierzyłem o ile to jest szybsze od "generyka" (start maszyny, kompilacje, działanie jvm). W najbardziej udanych przypadkach udawało mi się dostac jądro różniące się od standardowego nieistotnie. Dość często było w czymś dużo wolniejsze... - Więc w końcu odpuściłem...
PR
pragmaticdev
Z tego co pamiętam w czasach Gentoo i Celeronów 300 kompilacja systemu trwała ponad dobę.
szatkus
@PerlMonk: kiedyś ustawiłem sobie w statusie na gg, że jądro mi się zjeb***. Reakcje były ciekawe.
elwis
  • Rejestracja:ponad 18 lat
  • Ostatnio:16 dni
1

To zależy co masz na myśli. Musisz wiedzieć, że Linux (jako OS) to połączenie co najmniej kilku komponentów, każdy jest rozwijany osobno. Tak więc zacznij od określenia komponentu, który chcesz zmienić.

Najciężej jest z jądrem, bo na ogół, żeby przetestować, trzeba skopiować obraz jądra w odpowiednie miejsce, czasem zaktualizować konfigurację bootloadera, i uruchomić ponownie (wydaje mi się, że jest opcjonalna opcja podmieniania jądra w locie, ale nigdy tego nie używałem), za pewne warto robić to na maszynie wirtualnej. Trochę lżej jeśli modyfikujemy lub piszemy nowy moduł jądra. Na szczęście tylko najbardziej uprzywilejowane, najbliższe sprzętu rzeczy wymagają modyfikacji jądra. Z resztą, jeśli pytasz, raczej nie chcesz go ruszać, bo to zupełnie inna bajka niż programowanie w przestrzeni użytkownika. Podobnie jak w przypadku bootloadera.

W dalszej kolejności mamy program inicjujący — przeważnie systemd lub init (raczej na starszych dystrybucjach). Tu pewnie też będzie często potrzebne przeładowanie systemu. Dalej mamy program logowania w konsoli (zwyke pam), tryb graficzny (X11 lub Wayland). Systemowa powłoka to przeważnie bash (choć jest wiele innych implementacji), warto włączyć do tego też zestaw podstawowych programów, najpopularniejsze implementacje to coreutils i busybox.

Jeśli chodzi o program logowania w trybie graficznym to jest ich wiele (zwykle lightdm, kdm, gdm), a środowisk graficznych (np. Gnome, KDE, XFCE) i samodzielnych menedżerów okien jest już tyle, że nie będę wymieniać. :) Jeszcze warto wspomnieć o menedżerze pakietów — to już jest zależne od dystrybucji.

Dalej to już trudno powiedzieć co konkretnie zrobić, bo nie wiadomo co chcesz zrobić. To tak jakbyś zapytał, jak napisać program. :)


edytowany 6x, ostatnio: elwis
Szalony Programista
Szalony Programista
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 4 lata
  • Postów:227
0

Najłatwiej, najszybciej, najlepiej, najbezpieczniej będzie stworzyć moduł kernela, ładowany dynamicznie w razie czego po prostu reboot systemu zrobisz.
Ewentualnie można go na stałe zainstalować, zamiast dynamicznie ładować za pomocą insmod.

Dupa.c

Kopiuj
#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void) {
	printk(KERN_ALERT "DUPA: Hello!\n");
	return 0;
}

static void hello_exit(void) {
	printk(KERN_ALERT "DUPA: EXIT\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");

Makefile

Kopiuj
obj-m+=Dupa.o

Compile

Kopiuj
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

Install / remove

Kopiuj
insmod Dupa.ko
rmmod Dupa
VT
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 2 lata
0

Zasadniczo to tak jak przedmówcy już pisali - jest podział w GNU/Linuxie na część kernel-space i user-space. Kernel-space to programowanie na wysokim poziomie uprzywilejowania. Możesz się tam odwoływać np. do sprzętu (kart PCI i innych peryferiów) bezpośrednio a nie być skazanym na czyjeś rozwiązania. Wysoki poziom uprzywilejowania to również wysoki poziom odpowiedzialności za kod, który piszesz. Przykładowo w user-space jeśli pomylisz się w obsłudze wskaźnika to poleci tylko ten program, który źle się odwoływał do tego wskaźnika. Natomiast w kernel-space jeśli się pomylisz w obsłudze wskaźników to możesz sobie nieźle napsuć w całym systemie, na dysku, etc. Zwykle taki system po wysypce nadaje się do restartu. Początki programowania w kernel-space wydają się być proste bo zamieniasz printf() na printk() ale to tylko pozory bo im głębiej będziesz sięgać do kernela tym trudniej cokolwiek ogarnąć. Na "zachętę" dodam, że jeśli chodzi o literaturę do kernel-space Linuxa to jest jej trochę ale najlepsze pozycje są wysoce "przeterminowane" z racji tego, że kernel cały czas ewoluuje i trudno dogonić w książce to co w kernelu się dzieje.

AL
Ale jak napisać na odpowiednią grupę mailingową to odzew powinien być ;)
VT
Tak, odzew zwykle jest, ale pod warunkiem poprawnie zadanego pytania i unikania top postowania :)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)