LINUX.ORG.RU

i2c на 64 битах

 , , ,


0

2

Посоны, у кого-нибудь i2c работает на 64 битах?

Ловлю вот это, когда java приложение пытаюсь запустить:

[ 583.009638] Call Trace:
[ 583.013390] i2c_transfer+0x48/0xb0
[ 583.017174] i2cdev_ioctl_rdwr.isra.1+0x1dd/0x200 [i2c_dev]
[ 583.021095] i2cdev_ioctl+0x1a6/0x280 [i2c_dev]
[ 583.024987] do_vfs_ioctl+0x8b/0x5f0
[ 583.028846] ? handle_mm_fault+0xff/0x250
[ 583.032681] ? __fget+0x6c/0xa0
[ 583.036413] ksys_ioctl+0x62/0x90
[ 583.040111] __x64_sys_ioctl+0x11/0x20
[ 583.043793] do_syscall_64+0x3e/0x100
[ 583.047476] entry_SYSCALL_64_after_hwframe+0x44/0xa9

Та же система на 32 битах работает! Вот и вопрос, это косяк в драйвере или что-то нужно изменить в джава-приложении? Я в джаве лох, буду рад подсказкам. Есть ли там разница, собирается приложение под 32 или 64 jdk?

★★★★★

И что ты ожидаешь услышать, без фрагмента кода на Java, который всё это вызывает? Ты используешь самописную JNI библиотеку для доступа к функциям I2C или готовую какую-то? Если первое, то нативный код тоже в студию, если второе, то хотя бы название библиотеки.

KivApple ★★★★★ ()

Я бы начал с zgrep IA32_EMULATION /proc/config.gz

Хотя, судя по ошибке, проблема может быть и в чём-то другом…

Я в джаве лох, буду рад подсказкам. Есть ли там разница, собирается приложение под 32 или 64 jdk?

Они собираются в байткод, который можно запускать любой версией JRE (не JDK, хотя внутри JDK обычно есть и JRE). Версия байткода имеет большую роль (-target 6/7/8/9/11, например, старая JRE не запустит код для -target 11).

BattleCoder ★★★★★ ()

При чём тут жава? Напиши сишный код который напрямую будет минимально дёргать всё то же самое на i2cdev, посмотри будет ли валиться. Если будет - скорее всего проблема в ядре, но это врядли. Можешь i2c-tools в качестве референса посмотреть.

А так у тебя скорее всего структуры i2c трансфера поехали в памяти. Жава 32 бит на 64 бит системе?

Dark_SavanT ★★★★★ ()

Вообще, обычно когда такая ошибка, что аж JVM роняется, в 99% случаев говорит о дефекте в самой JVM, ну не должен плохо написанный код её ронять… Так что версию JRE (или JDK) тоже интересно было бы узнать, может, какая-то безумно старая?

Ну и код, естественно.

BattleCoder ★★★★★ ()

Работает, на пека видит eeprom на оперативке. АПВС?

anonymous ()
Ответ на: комментарий от BattleCoder

Так что версию JRE (или JDK) тоже интересно было бы узнать, может, какая-то безумно старая?

8u172

Ну и код, естественно.

Вот это ещё раскопать надо…

UVV ★★★★★ ()
Последнее исправление: UVV (всего исправлений: 1)

Это явно баг в ядре, т.е. что-бы не делало приложение oops-ов в ядре быть не должно. Скорее всего проблема в каком-то нижнем i2c, который мало кто использует.

Вполне вероятно, что одновременно есть какая-то ошибка в код приложения и/или библиотеки работающей c i2c, и эта ошибка вызывает ядерный oops.

Например, на стадии инициализации или подготовке что-то не срабатывает из-за неверных параметров и возвращается ошибка, но эта ошибка игнорируется, а в ядре структуру остаются в некорректном состоянии…

Deleted ()
Ответ на: комментарий от UVV

Да нет, выключать как раз не надо. Впрочем, для JRE должно быть пофик, если это байткод, и JVM 64-битная, то эмуляция не нужна.

Да, плюсую предыдущего оратора. Маловероятно, что ошибка в JVM (хотя исключать нельзя). Более вероятно, что через JNI вызов какой-то нативной библиотеки, и вот как раз там ошибка в 64-битной версии, которая не воспроизводится в 32-битной…

BattleCoder ★★★★★ ()
Последнее исправление: BattleCoder (всего исправлений: 1)

i2c на 64 битах работает, для проверки можно воспользоваться i2c-tools

i2cdetect i2cdump i2cget

Сталкивался с подобным, проблема была в Java обмотке поверх i2c.

svart ()
Ответ на: комментарий от svart

Сталкивался с подобным, проблема была в Java обмотке поверх i2c.

Да, скорее всего так и есть. Раскопал JNI, который собирается с другими флагами. Всем спасибо.

UVV ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.