Bus error linux ошибка

Обновлено: 03.07.2024

Я купил новый ноутбук ASUS-X556UF и установил в нем Ubuntu 14.04. Теперь я пытался установить драйверы Nvidia в соответствии с учебником.

В этот момент я заметил проблему с моей системой. Когда я переключился в режим командной строки (Ctrl + Alt + F1), на моей консоли появилось непрерывное отображение ошибок. Поэтому я получил доступ к моему syslog, чтобы проверить его. То же самое произошло при очистке моего файла /var/log/syslog. Ниже приведена ошибка, которую я получил:

Mar 20 05:27:41 Asus-X556UF kernel: [ 615.993338] pcieport 0000:00:1c.5: device [8086:9d15] error status/mask=00000001/00002000 Mar 20 05:27:41 Asus-X556UF kernel: [ 615.993342] pcieport 0000:00:1c.5: [ 0] Receiver Error (First) Mar 20 05:27:41 Asus-X556UF kernel: [ 615.993351] pcieport 0000:00:1c.5: AER: Multiple Corrected error received: 20 05:27:41 Asus-X556UF kernel: [ 615.993700] pcieport 0000:00:1c.5: can't find device of ID00e5 Mar 20 05:27:41 Asus-X556UF kernel: [ 615.993723] pcieport 0000:00:1c.5: AER: Multiple Corrected error received: 20 05:27:41 Asus-X556UF kernel: [ 615.994075] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, ID) Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994078] pcieport 0000:00:1c.5: device [8086:9d15] error status/mask=00000001/00002000 Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994080] pcieport 0000:00:1c.5: [ 0] Receiver Error Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994090] pcieport 0000:00:1c.5: AER: Corrected error received: 20 05:27:41 Asus-X556UF kernel: [ 615.994439] pcieport 0000:00:1c.5: can't find device of ID00e5 Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994464] pcieport 0000:00:1c.5: AER: Multiple Corrected error received: 20 05:27:41 Asus-X556UF kernel: [ 615.994816] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, ID) Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994818] pcieport 0000:00:1c.5: device [8086:9d15] error status/mask=00000001/00002000 Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994820] pcieport 0000:00:1c.5: [ 0] Receiver Error (First) Mar 20 05:27:41 Asus-X556UF kernel: [ 615.994829] pcieport 0000:00:1c.5: AER: Corrected error received: 20 05:27:41 Asus-X556UF kernel: [ 615.994837] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, ID)

Итак, я попытался найти, с каким подключением подключалась моя PCI-шина IC, и поэтому я побежал ниже команды:

$ lspci -v -s 1c.0 | grep Bus: Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 $ lspci -s 1:0 01:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 930M]

Он был подключен к моей видеокарте. Я не знаю, что вызывает эту проблему. Это из-за водителя или чего-то еще.

Я также попытался установить проприетарный драйвер в Ubuntu через дополнительную вкладку драйверов. Но я получил черный экран на экране входа в систему.

Пожалуйста, дайте мне знать, что вызывает ошибку, а также поможет установить драйвер nVidia и использовать его.

Ошибка на шине (bus error)- это ошибка, которая была вызвана аппаратным обеспечением, уведомляющим операционную систему о том , что процесс пытается получить доступ к памяти, которую процессор не может физически адресовать из-за того, что у адресной шины недопустимый адрес, а следовательно, и имя. В современном использовании на большинстве архитектур они встречаются гораздо реже , чем ошибки сегментации, которые возникают в основном из-за нарушений доступа к памяти: проблем с логическим адресом или разрешениями. На платформах, совместимых с портативным интерфейсом операционной системы( POSIX), ошибки шины обычно приводят к тому, что сигнал SIGBUS, который сигнализирует об ошибке шины, при обращении к физической памяти, передается процессу, который вызвал ошибку. SIGBUS также может быть вызван любой общей неисправностью устройства, которую обнаруживает компьютер, хотя ошибка шины редко означает, что компьютерное оборудование физически сломано, в основном это вызвано ошибкой в программном обеспечении.

Содержание

Причины возникновения

Существует 4 основных причины возникновения данной ошибки. Рассмотрим каждую из них.

Недействующий адрес

Программное обеспечение указывает процессору на чтение или запись определенного адреса физической памяти . Соответственно, центральный процессор устанавливает этот физический адрес на своей адресной шине и запрашивает все другое оборудование, подключенное к нему, чтобы ответить с результатами, если они отвечают за этот конкретный адрес. Если никакое другое оборудование не отвечает, центральный процессор вызывает исключение, указывающее, что запрошенный физический адрес не распознан всей компьютерной системой. Состоит отметить, что это касается только физических адресов памяти. Попытка доступа к неопределенному адресу виртуальной памяти обычно считается ошибкой сегментации, а не ошибкой шины, хотя если блок управления памятью (MMU) является отдельным, процессор не может определить разницу.

Несогласованный доступ

Ошибка страницы

Такие ОС как,FreeBSD, Linux и Solaris могут сигнализировать об ошибке шины, когда страницы виртуальной памяти не могут быть выгружены, например, потому, что она исчезла (например, доступ к файлу с отображением памяти или выполнение двоичного образа, который был усечен во время работы программы), или потому, что только что созданный файл с отображением памяти не может быть физически выделен, потому что диск заполнен.

Несуществующий сегмент(x86)

На x86(емейство архитектур наборов команд,основанных на микропроцессоре Intel 8086 ) существует старый механизм управления памятью, известный как сегментация. Если приложение загружает регистр сегмента с селектором несуществующего сегмента , генерируется исключение. Некоторые ОС использовали это для подкачки, но под Linux это генерирует SIGBUS.

В вычислении , А ошибка шины является неисправность поднят с помощью аппаратных средств, уведомляя об операционной системе (ОС) , что процесс пытается получить доступ к памяти , что процессор не может физически адрес: недопустимый адрес для адресной шины , отсюда и название. При современном использовании на большинстве архитектур они гораздо реже, чем ошибки сегментации , которые возникают в основном из-за нарушений доступа к памяти: проблем с логическим адресом или разрешениями.

На платформах, совместимых с POSIX , ошибки шины обычно приводят к отправке сигнала SIGBUS процессу, вызвавшему ошибку. SIGBUS также может быть вызван любой общей ошибкой устройства, которую обнаруживает компьютер, хотя ошибка шины редко означает, что компьютерное оборудование физически сломано - обычно это вызвано ошибкой в программном обеспечении . Ошибки шины могут также возникать для некоторых других ошибок пейджинга; увидеть ниже.

Содержание

Причины

Есть как минимум три основных причины ошибок шины:

Несуществующий адрес

Программное обеспечение инструктирует ЦП читать или записывать определенный адрес физической памяти . Соответственно, ЦП устанавливает этот физический адрес на своей адресной шине и запрашивает все остальное оборудование, подключенное к ЦП, для ответа с результатами, если они отвечают на этот конкретный адрес. Если никакое другое оборудование не отвечает, ЦП вызывает исключение , заявляя, что запрошенный физический адрес не распознается всей компьютерной системой. Обратите внимание, что это касается только адресов физической памяти. Попытка получить доступ к неопределенному адресу виртуальной памяти обычно считается ошибкой сегментации, а не ошибкой шины, хотя, если MMU является отдельным, процессор не может заметить разницу.

Невыровненный доступ

Например, если многобайтовый доступ должен быть выровнен по 16 битам, адреса (в байтах) 0, 2, 4, 6 и т. Д. Будут считаться выровненными и, следовательно, доступными, в то время как адреса 1, 3, 5 и так далее будет считаться невыровненным. Точно так же, если многобайтовый доступ должен быть выровнен по 32 бита, адреса 0, 4, 8, 12 и так далее будут считаться выровненными и, следовательно, доступными, а все адреса между ними будут считаться невыровненными. Попытка получить доступ к блоку размером больше байта по невыровненному адресу может вызвать ошибку шины.

Некоторые системы могут иметь их гибрид в зависимости от используемой архитектуры. Например, для оборудования на основе мэйнфрейма IBM System / 360 , включая IBM System z , Fujitsu B8000, RCA Spectra и UNIVAC Series 90 , инструкции должны находиться на 16-битной границе, то есть адреса выполнения должны начинаться с даже байт. Попытки перейти на нечетный адрес приводят к исключению спецификации. Однако данные могут быть получены с любого адреса в памяти и могут быть одним байтом или больше в зависимости от инструкции.

Обычно процессоры всегда обращаются к данным по всей ширине шины данных . Для адресации байтов они обращаются к памяти по всей ширине своей шины данных, затем маскируют и сдвигают для адресации отдельного байта. Системы терпимо относятся к этому неэффективному алгоритму, поскольку это важная функция для большинства программ, особенно для обработки строк . В отличие от байтов, блоки большего размера могут охватывать два выровненных адреса и, таким образом, потребуют более одной выборки по шине данных. ЦП может поддерживать это, но эта функция редко требуется непосредственно на уровне машинного кода , поэтому разработчики ЦП обычно избегают ее реализации и вместо этого выдают ошибки шины для доступа к невыровненной памяти.

Ошибки подкачки

FreeBSD , Linux и Solaris могут сигнализировать об ошибке шины, когда страницы виртуальной памяти не могут быть выгружены , например, потому что она исчезла (например, доступ к файлу с отображением памяти или выполнение двоичного образа, который был усечен во время работы программы), или потому что только что созданный файл с отображением памяти не может быть физически выделен, потому что диск заполнен.

Отсутствующий сегмент (x86)

На x86 существует более старый механизм управления памятью, известный как сегментация . Если приложение загружает регистр сегмента с помощью селектора отсутствующего сегмента (что в POSIX-совместимых операционных системах может быть выполнено только на языке ассемблера ), генерируется исключение. Некоторые операционные системы использовали это для свопинга, но в Linux это генерирует SIGBUS.

пример

Это пример невыровненного доступа к памяти, написанный на языке программирования C с синтаксисом ассемблера AT&T .

Компиляция и запуск примера в POSIX- совместимой ОС на x86 демонстрирует ошибку:

В GDB отладчик показывает , что непосредственное значение 0x2a в настоящее время хранятся в местоположении , хранящейся в EAX регистр , используя X86 язык ассемблера . Это пример косвенной адресации регистров .

Печать младших битов адреса показывает, что он не выровнен по границе слова («двойное слово» в терминологии x86).

Я пытаюсь запустить x86_64 playonlinux на моем RPi 4B с qemu-x86_64. Я использую 32-битную ОС. Вот ошибка при его запуске: (xenial-amd64)pi@raspberrypi44g:

/chroots/64-bit-x86 $ playonlinux /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) Looking for python. 2.7.

Я не могу создать "Ошибка шины" со следующим кодом сборки. Здесь адрес памяти, который я использую, не является допустимым каноническим адресом. Итак, как я могу вызвать эту ошибку? Я запускал этот фрагмент кода под Ubuntu 20.04 LTS с NASM 2.14.02, но это приводит к ошибке сегментации SIGSEGV при .

Можно ли делать что-то подобное? struct MyStruct < int x; const char y; // notice the const unsigned short z; >; struct MyStruct AStruct; fread(&MyStruct, sizeof (MyStruct), 1, SomeFileThatWasDefinedEarlierButIsntIncludedInThisCodeSnippet); Я изменяю постоянный член структуры, зап.

Я работаю над удалением обфускации подстроки из основной строки в C. Подстрока имеет формат xx:xx:xx:xx:xx:xx, где x может быть числом или буквой. В начале подстроки всегда есть пробел, но в конце подстроки не всегда есть пробел. Бывший. ввод может быть "Found new device with wlan 33:33:33:33:33:3.

У меня есть следующая структура: struct State < int num_walls; Wall walls[]; int num_persons; Person persons[]; >; Я хочу, чтобы люди содержали двух людей, а стены - одну стену: int num_walls = 1; int num_preson = 2; State simState = *(State*)malloc( sizeof(simState) + num_person*.

Я использую python 3.7 с помощью установки anaconda на виртуальной машине с Ubuntu 16. Из-за обширных слияний панд моя машина исчерпывает память, что вызывает ошибку шины (почему не исключение памяти). Но после этого сбоя моя установка на python повреждена. Похоже, что случайные файлы Python (наприм.

Я обновил Xcode до новой стабильной версии 10.2v. Я пытался построить свой проект, и он был успешным. Когда я пытаюсь заархивировать проект (рабочее пространство), я получаю ошибки, как на скриншоте ниже: Что я пробовал на данный момент: Обновите какао-бобы до последней версии -> COCOAPODS: 1.7.0.

В настоящее время я читаю Программирование на Expert C - Deep C Secrets. На странице 164, где автор объяснял ошибку шины и ошибку сегментации, он показал эту строку кода union < char a[10]; int i; >u ; int * p = ( int * ) &(u.a[1]); *p = 17; /* the misaligned addr in p causes a bus error */ .

Итак, я использую рекурсию и просматриваю массив с именем code, который содержит целые числа, и значение вычисляется после обхода массива. Но я не знаю, по какой причине это дает ОШИБКУ ШИНЫ: 10. Я даже попытался вручную просмотреть массив, и все вроде нормально, массив достаточно большой. //change.

Я пытаюсь написать программу точно так же, как это. Единственное отличие состоит в том, что я использую стековую память вместо раздела .bss для хранения значения, которое я получаю от вызывающей функции. После этого изменения я получаю ошибку шины при возврате из функции сборки. Есть идеи, почему.

Я использую macOS High Sierra. $ uname -v Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62

3/RELEASE_X86_64 У меня есть следующая синтезированная программа. void nop1() < for (;;); >void nop2() < while (1); >void nop3() < int i = 0; while(1) < i++; >.

Я пишу программу на C ++ (см. Ниже). Моя цель - хранить данные в структуре iov. Я выделил в конструкторе буфер фиксированной длины. Каждый раз, когда этот буфер заполняется, я хочу передать данные в iov и выделить новый буфер фиксированной длины. Наконец, когда я закончил обработку данных, я хоч.

Читайте также: