Instalacja zamkniętego sterownika Nvidia 190.53 na Linux 2.6.33.1

18 marca 2010, norbert_ramzes

Z konieczności chwili, postanowiłem skompilować najnowsze stabilne jądro Linuksa 2.6.33.1. Jednak po długiej konfiguracji i kompilacji pojawił się problem w postaci braku kompatybilności obecnie najnowszego sterownika kart graficznych firmy Nvidia (190.53) z tym kernelem.

Unable to build the NVIDIA kernel module.

Installation has failed. Please see the file
‘/var/log/nvidia-installer.log’ for details.
You may find suggestions
on fixing installation problems in the README available on the Linux
driver download page at www.nvidia.com.

Do wyboru miałem otwarty i wolny sterownik albo samemu rozwiązać problem. Wybrałem to drugie rozwiązanie, ze względu na obsługę sprzętowej akceleracji 3D.

Gotowe rozwiązanie.

Rzut oka na jedne z ostatnich linii w pliku /var/log/nvidia-installer.log:

...
/tmp/selfgz6879/NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv/nvacpi.c:511: error: too few arguments to function ‘acpi_walk_namespace’
...

Tłumacząc na polski:

/tmp/selfgz6879/NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv/nvacpi.c:511: błąd: za mało argumentów dla funkcji ‘acpi_walk_namespace’

Pasowałoby wpierw zajrzeć do tego nvacpi.c, ale niestety instalator jest samorozpakowujący i po instalacji usuwa wszystkie pliki – również po błędzie. Najlepszym wyjściem jest rozpakowanie za pomocą wbudowanego przełącznika:

~/nvidia # sh ./NVIDIA-Linux-x86_64-190.53-pkg2.run -h | grep extract
-x, --extract-only
~/nvidia # sh ./NVIDIA-Linux-x86_64-190.53-pkg2.run -x
Creating directory NVIDIA-Linux-x86_64-190.53-pkg2
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 190.53........................................

Wszystkie pliki zostały rozpakowane do nowego katalogu "NVIDIA-Linux-x86_64-190.53-pkg2" w bieżącej ścieżce (~/nvidia).

W pliku z logu, jak na razie, interesują nas tylko linijki w których występuje problem (tam gdzie jest wywoływana funkcja "acpi_walk_namespace"):

~/nvidia/NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv/nvacpi.c:

...
510: acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
511: ACPI_UINT32_MAX, nv_acpi_find_methods, NULL, NULL);
...
1151: acpi_walk_namespace(ACPI_TYPE_ANY, handle, 1, nv_acpi_walk_callback, acpi_name, NULL);
...

Grepując źródła jądra Linuksa w wersji 2.6.33.1, znajdujemy pierwszy plik w którym jest zdefiniowana ta funkcja.

/usr/src/my_linux/linux-2.6.33.1/include/acpi/acpixf.h:

...
153: acpi_status
154: acpi_walk_namespace(acpi_object_type type,
155: acpi_handle start_object,
156: u32 max_depth,
157: acpi_walk_callback pre_order_visit,
158: acpi_walk_callback post_order_visit,

159: void *context, void **return_value);
....

A następnie kernel 2.6.32:

...
153: acpi_status
154: acpi_walk_namespace(acpi_object_type type,
155: acpi_handle start_object,
156: u32 max_depth,
157: acpi_walk_callback user_function,
158: void *context, void **return_value);
....

Powyższe fragmenty robią wrażenie, że brakuje jednego argumentu "post_order_visit" oraz wcześniejszy argument "user_function" został zamieniony na "pre_order_visit".

Na oko można dopisać NULL bądź "nv_acpi_find_methods" jako ten brakujący argument "post_order_visit" albo usunąć odwołania do "acpi_walk_namespace", ale jest takie powiedzenie: "na oko to chłop w szpitalu umarł".

Jednak trzeba mieć 100% pewności i szukamy dalej, gdzie jest kod tej funkcji.

/usr/src/my_linux/linux-2.6.33.1/drivers/acpi/acpica/nsxfeval.c:

...
462: acpi_status
463: acpi_walk_namespace(acpi_object_type type,
464: acpi_handle start_object,
465: u32 max_depth,
466: acpi_walk_callback pre_order_visit,
467: acpi_walk_callback post_order_visit,

468: void *context, void **return_value)
469: {
470: acpi_status status;
471:
472: ACPI_FUNCTION_TRACE(acpi_walk_namespace);
473:
474: /* Parameter validation */
475:
476: if ((type > ACPI_TYPE_LOCAL_MAX) ||
477: (!max_depth) || (!pre_order_visit && !post_order_visit)) {
478: return_ACPI_STATUS(AE_BAD_PARAMETER);
479: }

480:
481: /*
...
491: */
492: status = acpi_ut_acquire_read_lock(&acpi_gbl_namespace_rw_lock);
493: if (ACPI_FAILURE(status)) {
494: return status;
495: }
496:
497: /*
...
502: */
503: status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
504: if (ACPI_FAILURE(status)) {
505: goto unlock_and_exit;
506: }
507:
508: status = acpi_ns_walk_namespace(type, start_object, max_depth,
509: ACPI_NS_WALK_UNLOCK, pre_order_visit,
510: post_order_visit, context,
511: return_value);

512:
513: (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
514:
515: unlock_and_exit:
516: (void)acpi_ut_release_read_lock(&acpi_gbl_namespace_rw_lock);
517: return_ACPI_STATUS(status);
518: }
...

/usr/src/my_linux/linux-2.6.33.1/drivers/acpi/acpica/nswalk.c:

...
192: acpi_status
193: acpi_ns_walk_namespace(acpi_object_type type,
194: acpi_handle start_node,
195: u32 max_depth,
196: u32 flags,
197: acpi_walk_callback pre_order_visit,
198: acpi_walk_callback post_order_visit,

199: void *context, void **return_value)
200: {
201: acpi_status status;
202: acpi_status mutex_status;
203: struct acpi_namespace_node *child_node;
204: struct acpi_namespace_node *parent_node;
205: acpi_object_type child_type;
206: u32 level;
207: u8 node_previously_visited = FALSE;
208:
209: ACPI_FUNCTION_TRACE(ns_walk_namespace);
210:
211: /* Special case for the namespace Root Node */
212:
213: if (start_node == ACPI_ROOT_OBJECT) {
214: start_node = acpi_gbl_root_node;
215: }
216:
217: /* Null child means "get first node" */
218:
219: parent_node = start_node;
220: child_node = acpi_ns_get_next_node(parent_node, NULL);
221: child_type = ACPI_TYPE_ANY;
222: level = 1;
223:
224: /*
225: * Traverse the tree of nodes until we bubble back up to where we
226: * started. When Level is zero, the loop is done because we have
227: * bubbled up to (and passed) the original parent handle (start_entry)
228: */
229: while (level > 0 && child_node) {
230: status = AE_OK;
231:
232: /* Found next child, get the type if we are not searching for ANY */
233:
234: if (type != ACPI_TYPE_ANY) {
235: child_type = child_node->type;
236: }
237:
238: /*
239: * Ignore all temporary namespace nodes (created during control
240: * method execution) unless told otherwise. These temporary nodes
241: * can cause a race condition because they can be deleted during
242: * the execution of the user function (if the namespace is
243: * unlocked before invocation of the user function.) Only the
244: * debugger namespace dump will examine the temporary nodes.
245: */
246: if ((child_node->flags & ANOBJ_TEMPORARY) &&
247: !(flags & ACPI_NS_WALK_TEMP_NODES)) {
248: status = AE_CTRL_DEPTH;
249: }
250:
251: /* Type must match requested type */
252:
253: else if (child_type == type) {
254: /*
255: * Found a matching node, invoke the user callback function.
256: * Unlock the namespace if flag is set.
257: */
258: if (flags & ACPI_NS_WALK_UNLOCK) {
259: mutex_status =
260: acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
261: if (ACPI_FAILURE(mutex_status)) {
262: return_ACPI_STATUS(mutex_status);
263: }
264: }
265:
266: /*
267: * Invoke the user function, either pre-order or post-order
268: * or both.
269: */
270: if (!node_previously_visited) {
271: if (pre_order_visit) {
272: status =
273: pre_order_visit(child_node, level,
274: context,
275: return_value);
276: }
277: } else {
278: if (post_order_visit) {
279: status =
280: post_order_visit(child_node, level,
281: context,
282: return_value);
283: }
284: }

285:
286: if (flags & ACPI_NS_WALK_UNLOCK) {
287: mutex_status =
288: acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
289: if (ACPI_FAILURE(mutex_status)) {
290: return_ACPI_STATUS(mutex_status);
291: }
292: }
293:
294: switch (status) {
295: case AE_OK:
296: case AE_CTRL_DEPTH:
297:
298: /* Just keep going */
299: break;
300:
301: case AE_CTRL_TERMINATE:
302:
303: /* Exit now, with OK status */
304:
305: return_ACPI_STATUS(AE_OK);
306:
307: default:
308:
309: /* All others are valid exceptions */
310:
311: return_ACPI_STATUS(status);
312: }
313: }
314:
315: /*
316: * Depth first search: Attempt to go down another level in the
317: * namespace if we are allowed to. Don't go any further if we have
318: * reached the caller specified maximum depth or if the user
319: * function has specified that the maximum depth has been reached.
320: */
321: if (!node_previously_visited &&
322: (level < max_depth) && (status != AE_CTRL_DEPTH)) {
323: if (child_node->child) {
324:
325: /* There is at least one child of this node, visit it */
326:
327: level++;
328: parent_node = child_node;
329: child_node =
330: acpi_ns_get_next_node(parent_node, NULL);
331: continue;
332: }
333: }
334:
335: /* No more children, re-visit this node */
336:
337: if (!node_previously_visited) {
338: node_previously_visited = TRUE;
339: continue;
340: }
341:
342: /* No more children, visit peers */
343:
344: child_node = acpi_ns_get_next_node(parent_node, child_node);
345: if (child_node) {
346: node_previously_visited = FALSE;
347: }
348:
349: /* No peers, re-visit parent */
350:
351: else {
352: /*
353: * No more children of this node (acpi_ns_get_next_node failed), go
354: * back upwards in the namespace tree to the node's parent.
355: */
356: level--;
357: child_node = parent_node;
358: parent_node = acpi_ns_get_parent_node(parent_node);
359:
360: node_previously_visited = TRUE;
361: }

362: }
363:
364: /* Complete walk, not terminated by user function */
365:
366: return_ACPI_STATUS(AE_OK);
367: }
...

Teraz sprawdzamy różnicę w stosunku do poprzedniej wersji jądra 2.6.32:

...
189: acpi_status
190: acpi_ns_walk_namespace(acpi_object_type type,
191: acpi_handle start_node,
192: u32 max_depth,
193: u32 flags,
194: acpi_walk_callback user_function,
195: void *context, void **return_value)
196: {
197: acpi_status status;
198: acpi_status mutex_status;
199: struct acpi_namespace_node *child_node;
200: struct acpi_namespace_node *parent_node;
201: acpi_object_type child_type;
202: u32 level;
203:
204: ACPI_FUNCTION_TRACE(ns_walk_namespace);
205:
206: /* Special case for the namespace Root Node */
207:
208: if (start_node == ACPI_ROOT_OBJECT) {
209: start_node = acpi_gbl_root_node;
210: }
211:
212: /* Null child means "get first node" */
213:
214: parent_node = start_node;
215: child_node = NULL;
216: child_type = ACPI_TYPE_ANY;
217: level = 1;
218:
219: /*
220: * Traverse the tree of nodes until we bubble back up to where we
221: * started. When Level is zero, the loop is done because we have
222: * bubbled up to (and passed) the original parent handle (start_entry)
223: */
224: while (level > 0) {
225:
226: /* Get the next node in this scope. Null if not found */
227:
228: status = AE_OK;
229: child_node = acpi_ns_get_next_node(parent_node, child_node);
230: if (child_node) {
231:
232: /* Found next child, get the type if we are not searching for ANY */
233:
234: if (type != ACPI_TYPE_ANY) {
235: child_type = child_node->type;
236: }
237:
238: /*
239: * Ignore all temporary namespace nodes (created during control
240: * method execution) unless told otherwise. These temporary nodes
241: * can cause a race condition because they can be deleted during
242: * the execution of the user function (if the namespace is
243: * unlocked before invocation of the user function.) Only the
244: * debugger namespace dump will examine the temporary nodes.
245: */
246: if ((child_node->flags & ANOBJ_TEMPORARY) &&
247: !(flags & ACPI_NS_WALK_TEMP_NODES)) {
248: status = AE_CTRL_DEPTH;
249: }
250:
251: /* Type must match requested type */
252:
253: else if (child_type == type) {
254: /*
255: * Found a matching node, invoke the user callback function.
256: * Unlock the namespace if flag is set.
257: */
258: if (flags & ACPI_NS_WALK_UNLOCK) {
259: mutex_status =
260: acpi_ut_release_mutex
261: (ACPI_MTX_NAMESPACE);
262: if (ACPI_FAILURE(mutex_status)) {
263: return_ACPI_STATUS
264: (mutex_status);
265: }
266: }
267:
268: status =
269: user_function(child_node, level, context,
270: return_value);

271:
272: if (flags & ACPI_NS_WALK_UNLOCK) {
273: mutex_status =
274: acpi_ut_acquire_mutex
275: (ACPI_MTX_NAMESPACE);
276: if (ACPI_FAILURE(mutex_status)) {
277: return_ACPI_STATUS
278: (mutex_status);
279: }
280: }
281:
282: switch (status) {
283: case AE_OK:
284: case AE_CTRL_DEPTH:
285:
286: /* Just keep going */
287: break;
288:
289: case AE_CTRL_TERMINATE:
290:
291: /* Exit now, with OK status */
292:
293: return_ACPI_STATUS(AE_OK);
294:
295: default:
296:
297: /* All others are valid exceptions */
298:
299: return_ACPI_STATUS(status);
300: }
301: }
302:
303: /*
304: * Depth first search: Attempt to go down another level in the
305: * namespace if we are allowed to. Don't go any further if we have
306: * reached the caller specified maximum depth or if the user
307: * function has specified that the maximum depth has been reached.
308: */
309: if ((level < max_depth) && (status != AE_CTRL_DEPTH)) {
310: if (child_node->child) {
311:
312: /* There is at least one child of this node, visit it */
313:
314: level++;
315: parent_node = child_node;
316: child_node = NULL;
317: }
318: }
319: } else {
320: /*
321: * No more children of this node (acpi_ns_get_next_node failed), go
322: * back upwards in the namespace tree to the node's parent.
323: */
324: level--;
325: child_node = parent_node;
326: parent_node = acpi_ns_get_parent_node(parent_node);
327: }
328: }
329:
330: /* Complete walk, not terminated by user function */
331:
332: return_ACPI_STATUS(AE_OK);
333: }
...

Pogrubione zostały najważniejsze dla nas zmiany.

W obydwu wersjach jądra, definicja typu acpi_walk_callback:

...
typedef
acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
u32 nesting_level,
void *context, void **return_value);
...

Łopatologicznie można powiedzieć, że "user_function" został rozbity na "pre_order_visit" i "post_order_visit" – odpowiednio, funkcja z pierwszego wskaźnika ("pre_order_visit") jest wywoływana jako pierwsza, a w każdym następnym przebiegu pętli while wywoływana jest ta z "post_order_visit".

Nie wgłębiając się zbytnio w szczegóły, wniosek nasuwa się sam. W jądrze 2.6.32, "user_function" jest wywoływany "zawsze" a żeby w 2.6.33.1 działanie było podobne, musimy "podać dwukrotnie ten sam wskaźnik – jako pre_order_visit i jako post_order_visit".

Jak już powiedziałem, nie wgłębiając się zbytnio w szczegóły, modyfikujemy plik nvacpi.c w ten sposób:

...
- 510: acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
- 511: ACPI_UINT32_MAX, nv_acpi_find_methods, NULL, NULL);

+ 510: acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
+ 511: ACPI_UINT32_MAX, nv_acpi_find_methods, nv_acpi_find_methods, NULL, NULL);

...
- 1151: acpi_walk_namespace(ACPI_TYPE_ANY, handle, 1, nv_acpi_walk_callback, acpi_name, NULL);
+ 1151: acpi_walk_namespace(ACPI_TYPE_ANY, handle, 1, nv_acpi_walk_callback, nv_acpi_walk_callback, acpi_name, NULL);
...

Zabijamy proces gdm (albo innego menadżera logowania) o ile jest uruchomiony i pracujemy na docelowym jądrze 2.6.33.1:

$ ps -C gdm
PID TTY TIME CMD
7865 ? 00:00:00 gdm
7866 ? 00:00:00 gdm
# kill 7865

Usuwamy moduł nvidia (jeśli jest załadowany):

# modprobe -r nvidia

albo:

# rmmod nvidia

Kopiujemy nagłówki kernela (jeśli nie zrobiliśmy tego wcześniej):

# cp /usr/src/my_linux/linux-2.6.33.1/include/generated/* /usr/src/my_linux/linux-2.6.33.1/include/linux

Albo lepiej linkujemy je:

# ln -s /usr/src/my_linux/linux-2.6.33.1/include/generated/* /usr/src/my_linux/linux-2.6.33.1/include/linux

Następnie ponownie instalujemy sterownik karty graficznej:

~/nvidia # cd NVIDIA-Linux-x86_64-190.53-pkg2
~/nvidia/NVIDIA-Linux-x86_64-190.53-pkg2 # ./nvidia-installer \
--kernel-source-path=/usr/src/my_linux/linux-2.6.33.1 \
-k 2.6.33.1

-> Would you like to run the nvidia-xconfig utility to automatically update you
r X configuration file so that the NVIDIA X driver will be used when you res
tart X? Any pre-existing X configuration file will be backed up. (Answer: N
o)

-> Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64
(version: 190.53) is now complete. Please update your XF86Config or
xorg.conf file as appropriate; see the file
/usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.

Uruchamiamy ponownie komputer:

# reboot

Albo uruchamiamy gdm/xdm/kdm, jeśli pracujemy na docelowym 2.6.33.1:

# gdm

Nic nie wybuchło! Grafika działa bez najmniejszych problemów. Jeszcze test glxgears:

udany test glxgears

I problem z głowy.

Literówki proszę zgłaszać na (JID/mail) norbert at linux dot pl albo (mail) redakcja at jakilinux dot org.

Problemy z instalacją proszę zgłaszać w komentarzach bądź lepiej na forum.

Autor: Norbert Kiszka
Skład: Norbert Kiszka

Aktualizacja:

Równolegle opublikowałem na linux.pl.

Jeden z użytkowników w komentarzu potwierdził, że działa na 2.6.34-rc1:

Od dłuższego czasu jadę na wersji BETA przez tą przypadłość.
Cieszę się że jest działające rozwiązanie.
Mogę potwierdzić że działa na Slackware z kernelem 2.6.34-rc1.

Podziel się na:

  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Śledzik
  • Blip
  • Identi.ca
  • Kciuk.pl
  • Wykop

Komentarze (RSS)

Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.

Liczba komentarzy: 23

zwiń wątek vries  18 marca 2010 o godz. 21:09 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -8 [Pokaż komentarz]

I właśnie za to nie lubię Linuksa. Czasem trzeba się nagrzebać w systemie, by coś zaczęło działać. Niesamowita strata czasu…

zwiń wątek bear  18 marca 2010 o godz. 21:23 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -1 [Pokaż komentarz]

Za to Windows to niesamowita strata pieniędzy. A w wolnym czasie można sobie podłubać.

zwiń wątek Przemek R.  28 marca 2010 o godz. 23:04 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +2 [Pokaż komentarz]

Pod Windowsem natomiast, gdy dostaniesz sterowniki niekompatybilne z aktualną wersją systemu, to możesz co najwyżej dać na mszę, by dostawca opublikował uaktualnione.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
 
zwiń wątek norbert_ramzes  18 marca 2010 o godz. 21:56 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +11 [Pokaż komentarz]

Spodziewałem się takiego komentarza, zwłaszcza po traszu.

Niesamowita strata czasu…

Żebyś Ty wiedział ile czasu kiedyś zmarnowałem żeby zainstalować Via Rhine III na win xp co skończyło się na naprawianiu systemu przez format. Wyjątkowo kupiłem nową w pudełku razem z płytką ze sterownikami (były do win i do lin). Na tej płytce do Linuksa były źródła modułu tylko dla 2.4.x a to dlatego że 2.6 dawno miał już własny – o czym m.in deweloperzy napisali w dość ciekawej dokumentacji na tej płytce. W domu do dziś mi leży jeszcze fajna stara (parę lat albo więcej – ale 100mbps) karta sieciowa D-Linka na usb. Pod win szukałem sterowników dosłownie lata i kompletnie nic nie znalazłem. Na Linuksie obydwie karty działają PNP (zaraz po podłączeniu i bez jakiejkolwiek instalacji czy konfiguracji).

Tutaj są porządne logi (i w ogóle są) oraz kod jest niezwykle czytelny i porządnie obkomentowany (no idealnie nie jest – ale znajdźcie mi jakiś większy kod który ma więcej komentarzy niż samego kodu). Dzięki czemu problem rozwiązałem w ~30 minut (na zegarek nie patrzyłem) pracując na konsoli w niskiej rozdzielczości i bez pośpiechu (a mogłem zrestartować na starym kernelu i pracować w środowisku graficznym). Jedynie ten art powstał ciut dłużej bo to było staranniej napisane niżeli sama naprawa.

A na Windowsie jak coś się sypie albo nie działa to można sobie jedynie zobaczyć niebieski ekranik albo komunikat “wystąpił błąd” a infolinia ms powie Ci tylko że to wina modemu albo płyty głównej byleby się Ciebie pozbyć. To się nazywa wsparcie i pomoc techniczna. Apropo w wyszukiwarce pomocy technicznej win xp wpisz “666″ (numer błędu dial-up) i zobaczysz wiele mówiącą jedną linijkę tekstu:

Modem jest niebezpiecznie podłączony do komputera

Jedyne co z tego rozumiem, to to że mogę się potknąć o kabel usb w drodze do łazienki.

Takich rzeczy w win jest całe mnóstwo. Jak nie wierzysz to poszukaj w wbudowanej pomocy albo w necie m.in na forach.

Po raz kolejny przypomnę parę rzeczy. Wszystko mi działa idealnie nawet na starych kernelach (2.6.26 i starsze). Nowy kernel skompilowałem tylko dlatego że według changeloga ma lepsze wsparcie dla bardzo młodego modemu usb który posiadam (w praktyce się okazało że jest dużo lepiej, choć do ideału brakuje – na xp jest dość podobnie).

Równie dobrze można narzekać że nowiutki silnik od Beinga nie pasuje zbytnio do starego malucha. Takim osobom to polecam wizytę u psychoanalityka.

@vries postaraj się napisać coś bardziej przekonywującego, no chyba że chcesz należeć do osób które pasują do powyższego akapitu.

zwiń wątek Dragonex  19 marca 2010 o godz. 17:33 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Popieram pana norberta – działających sterowników do mojej karty sieciowej do dzisiaj pod windowsa nie znalazłem. Pod linucha istniały one od 2.6.10 i gdy to zobaczyłem zrobiłem wielkie oczy.

A ta “niesamowita strata czasu” jest dla niektórych względna. Ja nie lubie właśnie jak pod linuchem skończy mi się powód do dłubania.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
zwiń wątek vries  21 marca 2010 o godz. 13:36 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +2 [Pokaż komentarz]

Ja mam zwyczajnie nadzieje, ze uruchomię mojego Creativa X-Fi 5.1 (usb) pod alsą z obsługa dźwięku 5.1. Co zapewne jest możliwe, skoro pulse audio to potrafi (z którego zacząłem korzystać, gdy dowiedziałem się, że na Ubuntu magicznie dźwięk działa ok). Na razie zmarnowałem jakieś 3-4 godziny na studiowanie dokumentacji alsy i różne próby.

Marnuję również sporo czasu, gdy okazuje się że tablet Wacoma akurat odmówił współpracy z Xorgiem, lub kernelem. Zdarzało się, że faktycznie znajdowałem i aplikowałem niezbędne łatki. Czasem używałem sterowników beta, czasem musiałem cofnąć update i tyle.

Meczę się obecnie z acpi i zmianą jasności na lapku. Tym czasem bez szczególnych efektów. Nowe moduły Intela niestety mnie nie lubią.

Ale i tak najciekawszy jest przypadek mojej myszki a4tech X750, którą nie mogę sortować zawartości okien naciskając na etykiety pod kde (np. w dolphinie). Może powinienem zapoznać się ze sterownikiem? (nie to nie jest wina kde, bo inne myszki działają)

Zapewne mógłbym naprawić wszystkie te problemy, zdaję sobie z tego sprawę. Ale nie jestem na tyle sprawnym programistą, by robić to bez pomocy wujka Google i dokumentacji. A na wszystko potrzebuję dość sporo czasu (zapewne dużo więcej niż zajęłoby to tobie). I musisz zdać sobie sprawę, że naprawiając problemy z moim kompem tracę czas podwójnie. Raz, bo muszę ślęczeć i rozwiązywać problem. Dwa, bo nie robię innych rzeczy.

Nie chcę podłączać silnika beinga do malucha. Nie twierdze, że pod win jest szczególnie lepiej. Nie twierdze, że łatwiej rozwiązywać problemy. Zwyczajnie wkurza mnie, że muszę siedzieć cały dzień i dłubać, bo coś nie działa. Wkurza mnie, że często marnuję sporo czasu, by z różnym skutkiem naprawiać błędy systemu.

@Dragonex: też kiedyś to lubiłem, ale później życie zaczęło mnie coraz bardziej naciskać bym z tym skończył.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
 
zwiń wątek gromiz  20 marca 2010 o godz. 13:47 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +3 [Pokaż komentarz]

@vries w pewnym sensie się z Tobą zgadzam, ale obecnie jest tak o wiele lepiej niż było kiedyś. Teraz przecież nie trzeba już samemu kompilować wszystkiego. Przykładowo we Fedorze instalacja zamkniętego sterownika nvidia to instalacja jednego pakietu i po resecie już działa. Do tego samo wszystko się aktualizuje. Czegoś takiego nie ma nawet w Windows, aby sterowniki systemu same się aktualizowały. Fakt faktem, że nieraz trzeba przywrócić poprzednią wersje kernela, bo nie idzie wszystko po naszej myśli, ale tak jest o wiele lepiej. Jeżeli ktoś normalnie na co dzień używa Linuxa to wcale nie musi instalować najnowszych rozwiązań, które oferują programiści.

zwiń wątek autumnlover  2 kwietnia 2010 o godz. 22:12 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

> Czegoś takiego nie ma nawet w
> Windows, aby sterowniki systemu same
> się aktualizowały.

Aktualizują się przecież! Nawet w XP! Dział “Sprzęt, opcjonalne” w Microsoft Update

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek norbert_ramzes  4 kwietnia 2010 o godz. 11:16 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Tylko jak często i jaka jest jakość tego/tych sterowników?

Zdarza mi się czasem zaglądać do źródeł kernela i muszę powiedzieć że jak wypuszczą jakiś moduł sterownika to nie zostawiają go tak sobie tylko czasem zmieniają to i owo żeby było lepiej/bardziej kompatybilnie.

 
 
 
zwiń wątek hellypton  25 kwietnia 2010 o godz. 0:36 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Bo to zależy jaką dystrybucję się instaluje – pod openSUSE wszystko działa “out of the box”.
Jak ktoś wybiera np. Gentoo, to powinien robić to świadomie – jest to system nastawiony na wydajność, ale kosztem ręcznej konfiguracji, przysłowiowego “dziobania”. Coś za coś. Ja na laptopie mam XP oraz openSUSE 11.2 (który startuje szybciej niż winda i jest o wiele bardziej responsywny) i bardzo sobie chwalę. Nie mam sensu tutaj instalować Gentoo, bo sekunda w tą czy w tamtą nie gra roli. Ale na serwerze, gdzie prowadzę złożone obliczenia (modelowanie molekularne) stoi Gentoo. Tam liczy się każda sekunda, bo jak się te sekundy pozbiera razem, to wyjdzie kilka godzin.

 
zwiń wątek has  2 maja 2010 o godz. 23:32 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

I dlatego linux nigdy nie bedzie odpowiednim systemem na desktop.

Porazka.

Takie oprogramowanie nie powinno wogle wychodzic. Nie wnikam czy jest to wina linuxa czy nvidii. Jak nie jedyni to drudzy byliby w stanie takie rzeczy usuwac…

Ale pewnie, lepiej sie przekrzykiwac na usnecie i wydawac jajko raz po raz aby tylko upchac w nim nowe drivery z ktorych cale 5 osob bedzie korzystac, maja w d…e jego stabilnosc i wspolprace…

Wersja stable jadra to MIT w obecnych czasach.
Strach sciagnac jakis update bo zaraz cos moze sie posywac. Dla upgrade calkiem trzeba stawiac klona bo niewiadomo czego sie spodziewac.

zwiń wątek norbert_ramzes  2 maja 2010 o godz. 23:54 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Wiesz co to są pakiety w dystrybucjach Linuksa? Jak nie to się lepiej nie wypowiadaj – normalna dystrybucja oznaczona jako stable nigdy nie ma takich problemów – a to dlatego bo pakiety są budowane tak aby nie występowały. Równie dobrze możesz narzekać np. że sterowniki z Win XP nie działają na Win 7 – identyczna analogia (często spotykana w laptopach, tyle że na odwrót).

Ale pewnie, lepiej sie przekrzykiwac na usnecie i wydawac jajko raz po raz aby tylko upchac w nim nowe drivery z ktorych cale 5 osob bedzie korzystac, maja w d…e jego stabilnosc i wspolprace…

A to źle że piszą nowe sterowniki? A co jeśli ktoś zachce kupić dany sprzęt i być szóstym? Co do stabilności to niemożna mu nic zarzucić (patrz serwery które działają bez restartu i bez awarii całe lata) a co do kompatybilności – to zależy wyłącznie od konkretnego producenta – w przypadku Nvidii jest prawie idealnie (brakuje tylko otwartości i ew. szybszych wydań).

Tak na przyszłość – jak się na czymś kompletnie nie znasz to się nie wypowiadaj.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
 
 
zwiń wątek serkamil  18 marca 2010 o godz. 22:11 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +4 [Pokaż komentarz]

W skrócie: news bardzo mi się podoba, takie małe i szybkie howto. Poza tym pokazuje jak można zacząć rozwiązywać problemy, jaką metodologię przyjąć, itp.

Pozdrawiam
Kamil

 
zwiń wątek :)  18 marca 2010 o godz. 22:45 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +8 [Pokaż komentarz]

A nie można po prostu zainstalować sterowniki beta? Ładnie się kompilują z 2.6.33.

zwiń wątek norbert_ramzes  18 marca 2010 o godz. 22:51 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +7 [Pokaż komentarz]

Dla każdego coś innego :)

 
 
zwiń wątek pawel k  18 marca 2010 o godz. 23:29 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +3 [Pokaż komentarz]

Cóż jako laik w tej sferze powiem krótko “uszanowanko”.

 
zwiń wątek raven18  19 marca 2010 o godz. 7:26 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -1 [Pokaż komentarz]

Hmm, ja tam nie wiem, ale na forum nvidii było/jest znacznie mniej skomplikowane rozwiązanie, czy raczej mniej skomplikowany patch. Sam korzystam ze sterowników z repozytorium i wystarczyło dopisać 2 (dwa) słowa w pliku nvacpi.c

zwiń wątek norbert_ramzes  19 marca 2010 o godz. 10:21 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Może i tak jest na tamtym forum – nie patrzyłem tylko sam rozwiązałem problem. W tym arcie są też dwa słowa!!! Jest tylko opisane szczegółowo jak do tego doszedłem (i jak w przyszłości rozwiązywać takie problemy).

Jak już w powyższym akapicie napisałem, rozwiązałem sam problem dopisując również dwa słowa, ale nie chce mi się nawet zaglądać na te fora, więc powiedz mi: czy odkryli że wystarczy TYLKO JEDNO SŁOWO??? Pewnie nie bo nikomu nie chciało się analizować kodu tylko pewnie z głupa (tak jak opisałem na początku art. że nie powinno się robić) dopisali jeden jakiś argument i tyle.

A teraz mały dowód że wystarczy tylko jedno: w moim powyższym art. zmodyfikuj linię 511 dokładnie jak napisałem ale 1151 zostaw w spokoju (czyli dalej tam brakuje jednego argumentu). Kompiluje się? Działa? Czemu? Bo nawet idiota powinien zauważyć linijkę 1086 a mianowicie:

#ifdef DEBUG

 
 
zwiń wątek Mikooos  19 marca 2010 o godz. 12:47 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Ładny motyw do metacity, kiedyś też go używałem, ostatnio jednak używam Mirę: http://img265.imageshack.us/img265/107/zrzutekranuqa.png W elementach sterujących Mira, a w krawędziach okna Mirav2, jednak trochę mi brakuje tych elementów czerwieni ;)

 
zwiń wątek DerDevil  21 marca 2010 o godz. 2:48 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Jak by ktoś miał problem taki że obraz dzieli się na 6 mniejszych to wystarczy w pliku xorg.conf w sekcji Device dopisać
Option “ModeValidation” “NoTotalsizecheck”

 
zwiń wątek sadi  22 marca 2010 o godz. 0:48 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Autor tego artykułu miał niezłego pecha – dzień po jego opublikowaniu wyszły sterowniki 195.36.15, które instalują się bez żadnych problemów. Mimo wszystko gratuluję – wiem jaką satysfakcję daje rozwiązanie takiego problemu.

zwiń wątek norbert_ramzes  22 marca 2010 o godz. 3:15 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Wiem o tym, choć 195.36.15 zrobiło mi dwa proste problemy. Raz że nie chciało się normalnie rozpakować (z -x się udało) a dwa to coś krzyczało że mu nie pasuje z bibliotekami – nawet nie przeczytałem dokładnie co tylko zainstalowałem jeszcze raz i poszło wtedy bez problemów.

 
 
zwiń wątek Emily  1 czerwca 2010 o godz. 3:03 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

@vries w pewnym sensie się z Tobą zgadzam, ale obecnie jest tak o wiele lepiej niż było kiedyś. Teraz przecież nie trzeba już samemu kompilować wszystkiego. Przykładowo we Fedorze instalacja zamkniętego sterownika nvidia to instalacja jednego pakietu i po resecie już działa. Do tego samo wszystko się aktualizuje. Czegoś takiego nie ma nawet w Windows, aby sterowniki systemu same się aktualizowały. Fakt faktem, że nieraz trzeba przywrócić poprzednią wersje kernela, bo nie idzie wszystko po naszej myśli, ale tak jest o wiele lepiej. Jeżeli ktoś normalnie na co dzień używa Linuxa to wcale nie musi instalować najnowszych rozwiązań, które oferują programiści.

 
Identyfikator (wymagane)
Adres e-mail (wymagany - nie pokażemy go publicznie)
Adres URI
Rozmiar pola: zmniejsz rozmiar | zwiększ rozmiar
Uwaga! Niektóre komentarze, m.in. te dodane przez niezalogowanych i nowych użytkowników, są ręcznie moderowane. Jeśli Twój komentarz nie ukaże się od razu, nie dodawaj go ponownie, tylko cierpliwie poczekaj na akceptację.

Literówki najlepiej zgłaszać jabberem: michuk@jakilinux.org lub kocio@jabber.org!

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="jaklinux.org">Linux dla każdego</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <strike>tekst przekreślony</strike>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.

O Autorze

Norbert Kiszka

Niedzielny deweloper/redaktor serwisów osnews i jakilinux

Branżowe oferty pracy

Reaklmy AdTaily

RSS

Możesz śledzić komentarze do tego artykułu poprzez specjalny kanał; RSS 2.0 .

Porównaj dystrybucje!

vs

Dołącz do nas!

Znasz się na grafice? Wymiatasz w CSS? Przerób design jednego z serwisów Grupy Jakilinux!
Więcej o współpracy na blogu Grupy Jakilinux.

Butik JL

jakilinux butik
Obejrzyj więcej produktów i wybierz coś dla siebie.

Subskrybuj Biuletyn!

Biuletyn Grupy Jakilinux to okresowy subiektywny przegląd najważniejszych informacji o których piszemy w naszych serwisach, który wysyłamy e-mailem. Subskrybuj biuletyn!