Генерируйте код сборки архитектуры MIPS на машине X86

3 ответа

На самом деле это невозможно; LVM ничего не знает о файлах.

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

Файловая система сохранена на этом блочном устройстве (логическом томе). Файловая система знает о файлах, но не экспортирует их на блочное устройство.

Точно так же, как вы не могли спросить свой жесткий диск, какие платы содержат файлы, вы не можете спросить LVM, какие PV содержат файлы.

[Вы можете, конечно, пройти через каждый файл в файловой системе, спросить файловую систему, которая блокирует его хранение, затем спросить LVM, где каждый из этих блоков, и сложить это все вместе, но я не знаю ни одного инструмента для этого. Я также не уверен, почему вы хотите сделать это.]

-121--175422-

Мне неизвестны какие-либо ограничения размера для здесь-doc. Я запускаю kernel 3,9,1 и испытываю здесь ту же проблему: при вставке больших фрагментов текста в терминале некоторые строки усекаются или отсутствуют. Я узнал (после некоторого гуглинга), что если отключить редактирование строк, вставка работает нормально (обсуждение здесь: Вставка больших объемов текста в программы с поддержкой readline усекает части вставляемого текста ).
Дальнейшие исследования показывают, что корень этой проблемы на самом деле был ошибкой ядра ( drivers/tty ) и, по-видимому, он исправлен в ядрах > = 3,14 . Это, вероятно, объясняет, почему люди с более актуальными установками не смогли воспроизвести поведение, которое мы оба испытываем.
ОБНОВЛЕНИЕ:
Я могу подтвердить, что после установки kernel 3,16,6 все работает нормально, поэтому исправление ядра или обновление до более поздней версии ( > = 3,14 ) должно устранить эту проблему.

-121--74230-

Основные сведения


Начиная с wiki архитектуры MIPS, она описывается как,

MIPS (первоначально аббревиатура для микропроцессора без блокировки Pipeline Stages) - сокращенный компьютер набора команд (RISC) набор инструкций (ISA), разработанный MIPS Technologies (ранее MIPS) Computer Systems, Inc.).

Из записи wiki x86-64 она описывается как,

x86-64 (также известная как x64, x86_64 и AMD64) является 64-разрядной версией набор команд x86.

Таким образом, согласно выводу arch в вопросе, очевидно, что у меня есть машина x86 _ 64 и я пытаюсь создать код архитектуры MIPS после запуска компилятора gcc .

Это аналогично пробованию дизельного автомобиля на бензиновом двигателе . Как бы мы ни старались, не подправив газовый двигатель, мы не смогли запустить дизельный автомобиль на бензиновом двигателе.

Описать его техническим способом , gcc может создавать код сборки для большого количества архитектур, включая MIPS . Но какая архитектура предназначена для данного экземпляра gcc , решается при компиляции самого gcc . Предварительно скомпилированный двоичный файл, который вы найдете в системе Ubuntu, знает о x86 (возможно, как 32-разрядном, так и 64-разрядном режимах), но не о MIPS .


Как скомпилировать программу C в код сборки MIPS


Снова цитирование из того же ответа , компиляция gcc с целевой архитектурой, отличной от архитектуры, на которой будет выполняться gcc , называется подготовкой цепочки инструментов для перекрестной компиляции. Или, говоря словами непрофессионала, этот инструментарий перекрестной компиляции похож на подгонку бензинового двигателя для запуска дизельного автомобиля .

Однако настройка инструментария для перекрестной компиляции - это довольно большая работа, поэтому вместо описания того, как это настроить, я опишу, как установить собственный компилятор MIPS в виртуальную машину MIPS. Это включает дополнительные шаги по настройке эмулятора для виртуальной машины и установке ОС в эту среду, но позволит использовать предварительно созданный собственный компилятор вместо компиляции перекрестного компилятора.

Сначала мы установим qemu , чтобы наша система работала под управлением некоторых виртуальных операционных систем. Снова существует несколько подходов, таких как установка какой-то перекрестной скомпилированной цепочки инструментов, как обсуждалось здесь и с использованием buildroot , как предложено в ответе, который я ранее связал.

  • Загрузите мяч дегтя qemu отсюда.
  • После загрузки мяча дегтя выполните следующие команды.

      bzip2 -d qe *
    tar -xvf qe *
    ./настроить
    сделать
    сделать установку
    
  • После установки qemu на компьютере я попробовал несколько методов netboot для debian OS, как предложено в здесь и здесь . Но к сожалению, я не смог выполнить установку debian OS с помощью netboot, поскольку не были доступны правильные зеркала.

Я получил образ для debian, который нацелен на архитектуру MIPS из здесь и я загрузил образ ядра и qemu и по вышеуказанной ссылке и выполнил следующие действия.

  • Я запустил qemu , как показано ниже.

     qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda
    debian_squeeze_mips_standard.qcow2 -apend «root =/dev/sda1 console = tty0»
    
  • После появления системы debian я установил компилятор gcc как ниже.

     обновление apt-get & & модернизация apt-get
    apt-get установка build-essential
    

Теперь у меня есть прекрасно работающий собственный компилятор gcc в виртуальной машине MIPS debian на qemu, который компилирует мою C-программу для MIPS специфического кода сборки.


Тестирование


Внутри моей машины Debian я только что поместил образец программы C hello world и сохранил его как hello.c , как показано ниже.

#include<stdio.h>
int main()
{
    printf("Hello World");
}

Чтобы создать код архитектуры MIPS для моей программы hello.c, я запустил программу C с помощью компилятора gcc как,

gcc -O2 -S -c hello.c

Приведенная выше команда создала файл hello.s , который создал мой код архитектуры MIPS .

    .file   1 "hello.c"
    .section .mdebug.abi32
    .previous
    .gnu_attribute 4, 1
    .abicalls
    .section    .rodata.str1.4,"aMS",@progbits,1
    .align  2
$LC0:
    .ascii  "Hello World\000"
    .text
    .align  2
    .globl  main
    .set    nomips16
    .ent    main
    .type   main, @function
main:
    .frame  $sp,0,$31       # vars= 0, regs= 0/0, args= 0, gp= 0
    .mask   0x00000000,0
    .fmask  0x00000000,0
    .set    noreorder
    .set    nomacro

    lui $28,%hi(__gnu_local_gp)
    addiu   $28,$28,%lo(__gnu_local_gp)
    lui $4,%hi($LC0)
    lw  $25,%call16(printf)($28)
    nop
    jr  $25
    addiu   $4,$4,%lo($LC0)

    .set    macro
    .set    reorder
    .end    main
    .size   main, .-main
    .ident  "GCC: (Debian 4.4.5-8) 4.4.5"

Но как узнать, является ли созданный выше код сборочным кодом MIPS ?

Выходные данные команды arch определяют архитектуру машины. В моей машине Debian она производит выходные данные как mips , и у меня также нет никаких binutils или цепочек инструментов кросс-компилятора, установленных в машине.

Таким образом, созданный код сборки является специфичным для MIPS .

11
27.01.2020, 20:32

Вам нужен кросс-инструментарий, gcc (+binutils), который работает на x86_64, но выводит mips двоичные файлы.

Вы можете попробовать собрать его самостоятельно (например, google: build cross toolchain) или загрузить предварительно собранный (например, из Codesourcery)

Или вы можете собрать свой собственный с помощью какого-нибудь инструмента типа crosstool-ng

Также системы типа buildroot собирают (или загружают) свой собственный кросс-инструментарий (наверное, также OpenWRT).

3
27.01.2020, 20:32

после нескольких дней борьбы с ударом Ubuntu часто, наконец, сработало.

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

....................................................................................................... Обзор проблемы: Попытка подключить ОС Linux к гарнитуре BT и установить sco-ссылку для воспроизведения музыки

Конфигурация UBuntu: Версия ядра: 3.0.0-32-generic Ubuntu Verion - > 11,10

Устройство тестирования: гарнитура JABRA EASY GO.. .............................................................................. 1) Установите версию Ubuntu выше. Эта версия Ubuntu не поддерживается, но поскольку мое внутреннее устройство использует почти ту же версию ядра, я придерживался этой версии.

2) Конфигурирование списка источников apt-get. Поскольку установленная версия не поддерживается, apt-get не будет работать. Для этого измените/etc/apt/sources.list. example- >

sudo sed -i -e 's/archive.ubuntu.com\| security.ubuntu.com/old-releases.ubuntu.com/g '/etc/apt/sources.list

sudo apt-get update & & sudo apt-get dist-upgrade 3) Я бы рекомендовал установить синаптик, а также установить пакеты и отсутствующие библиотеки.

4) Установите следующие пакеты -- >

 bluez-hcidump 
 bluez-utils
 libbluetooth1 
 libbluetooth1-dev
 install automake-1.7 and autoconfig
 cvs

5) Google для загрузки исходного кода btsco или

используйте следующую команду

cvs -d: pserver: anonymous@bluetooth-alsa.cvs.sourceforge.net :/cvsroot/bluetooth-alsa login cvs -d: pserver: anonymous@bluetooth-alsa.cvs.sourceforge.net :/cvsroot/bluetooth-alsa co btsco 6) ТЕПЕРЬ КОМПИЛЯЦИЯ И УСТАНОВКА

i) перейдите в каталог btsco

ii) ./Проблемы начальной загрузки: если ошибка/предупреждение: макрос «» AM _ PATH _ SDL «» не найден в библиотеке установки libbsdl1.2-dev

после прохождения начальной загрузки выполните configure ii) ./configure issues:

если bluetooth/bluetooth .h отсутствует - > install libbluetooth-dev требования к пакету dbus-1 > = не 0,36 соответствовать & dbus-glib не найден -- > установить libdbus-glib-1-dev iii) сделать

проблемы: ./libtool: line 841: X-tag = CXX: команда не найдена и много других ошибок, как это

Чтобы устранить эту ошибку: скачать libtool-1.5.24 tar ball. извлеките его, сконфигурируйте и сделайте. теперь снова сконфигурируйте btsco и скопируйте libtool, выполняемые из libtool dir в btsco.

iv) сделать установку v) сделать mainatiner-clean O/p: btsco построен успешно и вы можете найти его в/usr/local/bin.

7) Модуль Build Kernel

i) cd/usr/src/btsco/kernel

ii) создает

проблемы: я предполагаю, что вы получите огромный список ошибок. открыть btsco.cand обрабатывать каждую ошибку шаг за шагом

1 ошибка звук/driver.h не найден bla bla - > комментарий, что в файле btsco.c 2 комментарий # включить, так как это устарело 3) добавить

# включить < linux/smp.h > # include < linux/muxtex.h > 4) DEFINE_MUTEX (os_mutex);

5) snd_assert устарел, поэтому замените uit на if statement example

if (bt_sco->playback = NULL) {

} 6) заменить kill_proc (снова устаревший) функцией ниже 9, скопированной из сети.. tahnks тому парню) ссылка: http:/ /www.linuxquestions.org/questions/linux-kernel-70/is-there-any-kill_proc-replacement-for-proprietary-linux-kernel-drivers-4175460017/

int my_kill_proc (pid_t pid, int sig) { int error = -ESRCH ;/* возвращаемое значение по умолчанию / struct task_struct р; struct task_struct * t = NULL; struct pid * pspid; rcu_read_lock (); p = & init _ task ;/* начать в init / сделать { если (p- > pid = = pid) {/ соответствует pid (не tgid)? / t = p;
разрыв; } p = next_task (p) ;/
«это не та задача, которую вы ищете» / } пока (p! = & init _ task) ;/ остановимся, когда вернемся к init */ если (t! = NULL) { pspid = t- > pids [PIDTYPE _ PID] .pid; если (pspid! = NULL) ошибка = kill_pid (pspid, sig, 1); } rcu_read_unlock (); ошибка возврата; } и тогда вместо kill_proc должно быть

my _ kill _ proc (bt_sco->thread_pid, SIGINT)
6) заменить% d на% lu для ошибки длинной int

7) заменить lock_kernal на mutex_lock (& os _ mutex) то же самое для разблокировки

надеюсь, что после этого

8) сделать установку 9) depmod -e 10 0 сделать чистым

11) modprobe snd_bt_sco

......................................

Теперь голосовой btsco

a) hciconfig hci0 0X0060

b) hcitool просмотр, которым управляют

получает mac_addre4ss JABRA

c)/usr/local/bin/btsco-r-v mac_addrees

, если получают ошибку?: управлять открытый (hw:1) тогда, Jabra не поддерживает sco, или ядерный модуль не загружен

, d) на другом терминале делают-> sudo hcidump-i hci0 sco, чтобы контролировать sco пакеты

e), как только связь Джабра установлена aplay-D plughw:Headset/home/my_home_dir/my_sample_fiile.wav

пробега -121--196453-

У меня есть два eee pc 701: оригинальный с Xandros и оригинальный с Windows XP. Оба они в полном рабочем состоянии, хотя и страдают от юральных ОС, которые они используют. Недавно я начал играть с Puppy Linux. Я попробовал Slacko, Точный и, наконец, Lucid 5.2.8. Все они запускаются с USB Pen Drive. Все они работают без проблем. Я нахожу Lucid лучшим, как я нашел все ежедневные мягкие, что я использую: LibreOffice, Thunderbird, Firefox, Truecrypt (да, я все еще использую его ежедневно), вино и т.д. Любой вопрос с небольшим разрешением экрана. Система обнаруживает его автоматически и, почти все вещи, работает нормально. Так что нет необходимости искать какую-либо из старых специфических ОС, разработанных только для 701 (eeebuntu, Pupeee, Breeezy и т.д.). Ты просто используешь Lucid Puppy «как есть,» и все. У вас есть последние релизы упомянутого софт. Удивительно, если вы используете интегрированную системную информацию только для того, чтобы увидеть, что с ОС заряжается на ОЗУ, LibreOffice Writer, LibreOfffice Calc, Firefox и, возможно, другая программа работает, и вы просто используете около 300 МБ оперативной памяти. Таким образом, и несмотря на то, что есть другие небольшие ОС Linux, подходящие для этих маленьких машин, если вы используете Puppy, что я плавники специально подходит для неопытных пользователей Linux (Как я есть), вы все еще сможете запустить свои 701 в течение многих лет.Это действительно удовольствие иметь возможность использовать эти машины, даже лучше, что их первый рабочий день (с Xandros или XP).

-121--98372-

Проект emdebian проделал определенную работу над перекрестными цепочками инструментов .

Поскольку эти пакеты довольно сильно страдают от загнивания, я хотел бы узнать о текущем состоянии проекта emdebian, либо через список рассылки, либо через IRC.

1
27.01.2020, 20:32

Теги

Похожие вопросы