https://paz00.ru/api.php?action=feedcontributions&user=Resetnow&feedformat=atomToshiba AC100 wiki - Вклад [ru]2024-03-29T12:51:31ZВкладMediaWiki 1.39.5https://paz00.ru/index.php?title=Kernel_compilation&diff=619Kernel compilation2014-12-09T19:39:41Z<p>Resetnow: </p>
<hr />
<div>===='''Часть первая(и самая важная). Подготовка.'''==== <br />
<br />
Предположим, что мы используем Ubuntu 11.04 (если это не так, то посмотреть, как настроить компилятор можно на странице [[Кросс компилятор]]).<br />
Первым делом откроем эмулятор терминала, и перейдем в режим суперпользователя:<br />
<pre><br />
$ sudo su<br />
</pre><br />
Далее обновим имеющиеся в системе пакеты и установим необходимые.<br />
<pre><br />
# apt-get update<br />
# apt-get upgrade<br />
# apt-get install git gcc-arm-linux-gnueabi<br />
</pre><br />
<br />
===='''Часть вторая(и самая долгая). Получение исходников, конфигурирование и сборка.'''==== <br />
<pre><br />
# git clone git://gitorious.org/~marvin24/ac100/marvin24s-kernel.git<br />
# cd marvin24s-kernel<br />
</pre><br />
Переключаемся на актуальную версию ядра<br />
<pre><br />
# git checkout -b l4t-r16-r2-ac100 origin/l4t-r16-r2-ac100<br />
</pre><br />
Небольшая справка по использованию git для выбора нужной ветки и их краткое описание(todo):<br />
git branch -r = отобразить все ветви репозитория.<br />
git checkout <имя ветви> = переключиться на определенную ветвь.<br />
git show HEAD = отобразить содержимое последнего коммита активной ветви.<br />
<br />
После первой комманды мы можем пойти на кухню, выпить кружку теплого молока и съесть пару печенек.<br />
А потом вновь приняться за дело. Сначала выбираем конфигурацию.<br />
Для 3.1 paz00_defconfig:<br />
<pre><br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- paz00_defconfig<br />
</pre><br />
для 3.10 и старше - tegra_defconfig:<br />
<pre><br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- tegra_defconfig<br />
</pre><br />
Собираем<br />
<pre><br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-<br />
# mkdir -p modules_install/lib/firmware<br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- \<br />
modules_install INSTALL_MOD_PATH=./modules_install<br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- \<br />
firmware_install INSTALL_MOD_PATH=./modules_install<br />
</pre><br />
'''Замечание''': для ядер, которые используют device tree (например, 3.8 или 3.10), нужно dtb файл добавить к zImage или грузить отдельно (см. [[kernel_compilation#devicetree|описание device tree]])<br />
<br />
На данном этапе мы уже можем положить модули и прошивки на карточку с рутфс.<br />
<pre><br />
# cp -r ./modules_install/lib/* /mnt/usbflash/lib/*<br />
</pre><br />
(вместо mnt/usbflash — конкретный каталог в который смонтирована карта/флеш с rootfs)<br />
Никто не запрещает сделать это через тот же Nautilus, для наглядности.<br />
<br />
===='''Часть третья (и самая-самая). Заворачиваем ядро в загрузочный образ.'''==== <br />
'''Замечание''': помимо mkbootimg из пакета [[nvflash]] можно использовать [[abootimg]].<br />
Тут есть один (и более) пунктов на которые необходимо обратить внимание:<br />
Если мы планируем загружать rootfs c флешки нашим root в cmdline будет /dev/sda1<br />
Если с SD карты - то mmcblk1p1. В зависимости от этого необходимо редактировать (или напротив) следующую строку с параметрами загрузки ядра (не самая актуальная строка, более подробно расписано на странице [[cmdline]]).<br />
<pre><br />
# export CMD_LINE="mem=512M@0M console=tty1 root=/dev/mmcblk1p1 rootwait rootfstype=ext4"<br />
</pre><br />
Экстренно скачиваем программу для создания загрузочного образа и даем ей права для запуска:<br />
<pre><br />
# wget http://zen-droid.googlecode.com/files/mkbootimg<br />
# chmod +x mkbootimg<br />
</pre><br />
Ну и завершаем все это дело созданием образа. (в home/user вместо user = имя вашего пользователя)<br />
<range type="comment" id="386620390_1">Ахтунг для юзеров 64 битных дебианов и быть может убунт минтов и прочих. Если mkbootimg не запустится - это значит что ему не хватает 32 битных библиотек.</range id="386620390_1"><br />
Для их получения делаем следующее:<br />
sudo dpkg --add-architecture i386<br />
sudo apt-get update<br />
sudo apt-get install ia32-libs libc6-dev-i386<br />
если чего то не будет то добавьте в source.list sid'овские репы.<br />
<pre><br />
#./mkbootimg --kernel /home/user/marvin24s-kernel/arch/arm/boot/zImage \<br />
--ramdisk NONE --cmdline "$CMD_LINE" -o MyNewBootImage.img<br />
</pre><br />
Теперь в папке marvin24s-kernel вы можете найти MyNewBootImage.img который можно будет зашить в выбранный вами раздел. Но это уже совсем другая история.<br />
<br />
===='''Дополненительные материалы'''==== <br />
=====Извлечение конфига из бинарной сборки ядра===== <br />
Иногда есть необходимость достать конфиг из чужого уже собранного ядра, есть конечно вариант запустить его и считать файл '''/proc/config.gz''' но это долго, быстрее сразу считать конфиг из файла '''zImage''' от уже собранного ядра, сделать это можно следующим образом<br />
<pre><br />
$ cd any-kernel-source-root<br />
$ scripts/extract-ikconfig any-kernel-binary-path/zImage > .config<br />
</pre><br />
<br />
=====Сравнение двух веток исходников===== <br />
Чтобы получить '''patch''' файл сравнения двух веток исходников можно воспользоваться следующей коммандой<br />
<pre><br />
$ diff -Naur any-kernel-source-tree-1 any-kernel-source-tree-2 > kernel-1-vs-kernel-2.patch<br />
</pre><br />
<br />
<br />
===='''Device tree'''====<br />
'''Относится к linux-next, 3.8, 3.10, ...'''<br />
Сборка device tree<br />
<pre><br />
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs<br />
</pre><br />
Далее нужно его добавить к ядру<br />
<pre><br />
cat arch/arm/boot/dts/tegra20-paz00.dtb >> arch/arm/boot/zImage<br />
</pre><br />
или, при использовании [[uboot|u-boot'а]], загружать в память и передавать третьим параметром в команду bootz.</div>Resetnowhttps://paz00.ru/index.php?title=Kernel_compilation&diff=618Kernel compilation2014-12-09T19:39:16Z<p>Resetnow: </p>
<hr />
<div>===='''Часть первая(и самая важная). Подготовка.'''==== <br />
<br />
Предположим, что мы используем Ubuntu 11.04 (если это не так, то посмотреть, как настроить компилятор можно на странице [[Кросс компилятор]]).<br />
Первым делом откроем эмулятор терминала, и перейдем в режим суперпользователя:<br />
<pre><br />
$ sudo su<br />
</pre><br />
Далее обновим имеющиеся в системе пакеты и установим необходимые.<br />
<pre><br />
# apt-get update<br />
# apt-get upgrade<br />
# apt-get install git gcc-arm-linux-gnueabi<br />
</pre><br />
<br />
===='''Часть вторая(и самая долгая). Получение исходников, конфигурирование и сборка.'''==== <br />
<pre><br />
# git clone git://gitorious.org/~marvin24/ac100/marvin24s-kernel.git<br />
# cd marvin24s-kernel<br />
</pre><br />
Переключаемся на актуальную версию ядра<br />
<pre><br />
# git checkout -b l4t-r16-r2-ac100 origin/l4t-r16-r2-ac100<br />
</pre><br />
Небольшая справка по использованию git для выбора нужной ветки и их краткое описание(todo):<br />
git branch -r = отобразить все ветви репозитория.<br />
git checkout <имя ветви> = переключиться на определенную ветвь.<br />
git show HEAD = отобразить содержимое последнего коммита активной ветви.<br />
<br />
После первой комманды мы можем пойти на кухню, выпить кружку теплого молока и съесть пару печенек.<br />
А потом вновь приняться за дело. Сначала выбираем конфигурацию.<br />
Для 3.1 paz00_defconfig:<br />
<pre><br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- paz00_defconfig<br />
</pre><br />
для 3.10 и старше - tegra_defconfig:<br />
<pre><br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- tegra_defconfig<br />
</pre><br />
Собираем<br />
<pre><br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-<br />
# mkdir -p modules_install/lib/firmware<br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- \<br />
modules_install INSTALL_MOD_PATH=./modules_install<br />
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- \<br />
firmware_install INSTALL_MOD_PATH=./modules_install<br />
</pre><br />
'''Замечание''': для ядер, которые используют device tree (например, 3.8 или 3.10), нужно dtb файл добавить к zImage или грузить отдельно (см. [[kernel_compilation#devicetree|описание device tree]])<br />
<br />
На данном этапе мы уже можем положить модули и прошивки на карточку с рутфс.<br />
<pre><br />
# cp -r ./modules_install/lib/* /mnt/usbflash/lib/*<br />
</pre><br />
(вместо mnt/usbflash — конкретный каталог в который смонтирована карта/флеш с rootfs)<br />
Никто не запрещает сделать это через тот же Nautilus, для наглядности.<br />
<br />
===='''Часть третья (и самая-самая). Заворачиваем ядро в загрузочный образ.'''==== <br />
'''Замечание''': помимо mkbootimg из пакета [[nvflash]] можно использовать [[abootimg]].<br />
Тут есть один (и более) пунктов на которые необходимо обратить внимание:<br />
Если мы планируем загружать rootfs c флешки нашим root в cmdline будет /dev/sda1<br />
Если с SD карты - то mmcblk1p1. В зависимости от этого необходимо редактировать (или напротив) следующую строку с параметрами загрузки ядра (не самая актуальная строка, более подробно расписано на странице [[cmdline]]).<br />
<pre><br />
# export CMD_LINE="mem=512M@0M console=tty1 root=/dev/mmcblk1p1 rootwait rootfstype=ext4"<br />
</pre><br />
Экстренно скачиваем программу для создания загрузочного образа и даем ей права для запуска:<br />
<pre><br />
# wget http://zen-droid.googlecode.com/files/mkbootimg<br />
# chmod +x mkbootimg<br />
</pre><br />
Ну и завершаем все это дело созданием образа. (в home/user вместо user = имя вашего пользователя)<br />
<range type="comment" id="386620390_1">Ахтунг для юзеров 64 битных дебианов и быть может убунт минтов и прочих. Если mkbootimg не запустится - это значит что ему не хватает 32 битных библиотек.</range id="386620390_1"><br />
Для их получения делаем следующее:<br />
sudo dpkg --add-architecture i386<br />
sudo apt-get update<br />
sudo apt-get install ia32-libs libc6-dev-i386<br />
если чего то не будет то добавьте в source.list sid'овские репы.<br />
<pre><br />
#./mkbootimg --kernel /home/user/marvin24s-kernel/arch/arm/boot/zImage \<br />
--ramdisk NONE --cmdline "$CMD_LINE" -o MyNewBootImage.img<br />
</pre><br />
Теперь в папке marvin24s-kernel вы можете найти MyNewBootImage.img который можно будет зашить в выбранный вами раздел. Но это уже совсем другая история.<br />
<br />
===='''Дополненительные материалы'''==== <br />
=====Извлечение конфига из бинарной сборки ядра===== <br />
Иногда есть необходимость достать конфиг из чужого уже собранного ядра, есть конечно вариант запустить его и считать файл '''/proc/config.gz''' но это долго, быстрее сразу считать конфиг из файла '''zImage''' от уже собранного ядра, сделать это можно следующим образом<br />
<pre><br />
$ cd any-kernel-source-root<br />
$ scripts/extract-ikconfig any-kernel-binary-path/zImage > .config<br />
</pre><br />
<br />
=====Сравнение двух веток исходников===== <br />
Чтобы получить '''patch''' файл сравнения двух веток исходников можно воспользоваться следующей коммандой<br />
<pre><br />
$ diff -Naur any-kernel-source-tree-1 any-kernel-source-tree-2 > kernel-1-vs-kernel-2.patch<br />
</pre><br />
<br />
<br />
===='''Device tree'''====<br />
'''Относится к<range type="comment" id="18021"> linux-next</range id="18021">, 3.8, 3.10, ...'''<br />
Сборка device tree<br />
<pre><br />
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs<br />
</pre><br />
Далее нужно его добавить к ядру<br />
<pre><br />
cat arch/arm/boot/dts/tegra20-paz00.dtb >> arch/arm/boot/zImage<br />
</pre><br />
или, при использовании [[uboot|u-boot'а]], загружать в память и передавать третьим параметром в команду bootz.</div>Resetnowhttps://paz00.ru/index.php?title=Faq-android&diff=617Faq-android2014-12-09T19:33:34Z<p>Resetnow: </p>
<hr />
<div>'''Q:''' Как переключить раскладку в android 4.x<br /><br />
'''A:''' Язык&ввод->физическая клавиатура->ткнуть nvec keyboard->настроить раскладки клавиатуры. Переключение по ctrl+пробел (об этом написано прям там где выбор раскладок отмечаешь)</div>Resetnowhttps://paz00.ru/index.php?title=Faq&diff=616Faq2014-12-09T19:33:12Z<p>Resetnow: /* Общие вопросы */</p>
<hr />
<div><span style="color: red;">'''Просьба добавлять только то, что касается тошки.'''</span> Вопросы, не касающиеся тошки, можно и в гугле найти.<br />
<br />
==Общие вопросы== <br />
<br />
'''Q:''' перестал работать touchpad<br /><br />
'''A:''' тачпад отключается аппаратно кнопкой f9. Нажми ее еще раз.<br />
<br />
'''Q:''' нет изображения через hdmi кабель.<br /><br />
'''A:''' см. инструкцию об [[HDMI]].<br />
<br />
'''Q:''' можно ли осуществлять перепрошивку смартбука от обычного пользователя<br /><br />
'''A:''' создать в каталоге /etc/udev/rules.d файл 50-ac100.rules содержимое всего одна строка, далее перезапустить udevd, пользователь должен быть членом группы plugdev<br />
<br />
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", ATTR{idProduct}=="7820", MODE="0660", GROUP="plugdev"<br />
<br />
'''Q:''' можно ли переразбить внутреннюю память<br /><br />
'''A:''' на свой страх и риск - [[переразбивка внутренней памяти]]<br />
<br />
'''Q:''' я не нашел ответ на свой вопрос в FAQ'e<br /><br />
'''A:''' задай вопрос на [http://webchat.freenode.net/?channels=ac100-ru IRC канале #ac100-ru ]<br />
<br />
==[[faq-ubuntu|Ubuntu]]== <br />
{{:faq-ubuntu}}<br />
<br />
==[[faq-android|Android]]== <br />
{{:faq-android}}</div>Resetnowhttps://paz00.ru/index.php?title=Faq-ubuntu&diff=615Faq-ubuntu2014-12-09T19:32:36Z<p>Resetnow: </p>
<hr />
<div>'''Q''' после определенного периода бездействия экран гаснет. Если попробовать разбудить тошку, включается только подсветка, а изображения нет.<br /><br />
'''A''' ctrl+alt+f1 (переход в консольный режим), потом alt+f7 (переход обратно в графический).<br />
<br />
'''Q:''' после апдейта на любую операцию с apt-get выдаётся ошибка. что-то вроде <tt>Couldn't find android boot partition on /dev/mmcblk0</tt><br /><br />
'''A:''' <code>apt-get install abootimg</code><br />
<br />
'''Q:''' после выхода смартбука из сна (или по какой-то другой причине) пропал звук<br /><br />
'''A:''' попробуй <code>alsaucm -c tegraalc5632 reset</code>. Если не поможет, запускай alsamixer и читай [[Звук|инструкцию]]<br />
<br />
'''Q:''' как быстро списать со смартбука какой-нибудь файл по сети?<br /><br />
'''А:''' набрать в адресной строке <code>python -m SimpleHTTPServer</code> в директории, откуда надо что-то списать, набрать в браузере на другой машине из той же сети <code><nowiki>http://<ip-адрес-смартбука>:8000/</nowiki></code>, тыкнуть мышкой в нужный файл. IP-адрес можно узнать в консоли из вывода команды <tt>ifconfig</tt>.</div>Resetnowhttps://paz00.ru/index.php?title=Faq&diff=614Faq2014-12-09T19:28:02Z<p>Resetnow: /* Общие вопросы */</p>
<hr />
<div><span style="color: red;">'''Просьба добавлять только то, что касается тошки.'''</span> Вопросы, не касающиеся тошки, можно и в гугле найти.<br />
<br />
==Общие вопросы== <br />
<br />
'''Q:''' перестал работать touchpad<br />
'''A:''' тачпад отключается аппаратно кнопкой f9. Нажми ее еще раз.<br />
<br />
'''Q:''' нет изображения через hdmi кабель.<br />
'''A:''' см. инструкцию об [[HDMI]].<br />
<br />
'''Q:''' можно ли осуществлять перепрошивку смартбука от обычного пользователя<br />
'''A:''' создать в каталоге /etc/udev/rules.d файл 50-ac100.rules содержимое всего одна строка, далее перезапустить udevd, пользователь должен быть членом группы plugdev<br />
<br />
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", ATTR{idProduct}=="7820", MODE="0660", GROUP="plugdev"<br />
<br />
'''Q:''' можно ли переразбить внутреннюю память<br />
'''A:''' на свой страх и риск - [[переразбивка внутренней памяти]]<br />
<br />
'''Q:''' я не нашел ответ на свой вопрос в FAQ'e<br />
'''A:''' задай вопрос на [http://webchat.freenode.net/?channels=ac100-ru IRC канале #ac100-ru ]<br />
<br />
==[[faq-ubuntu|Ubuntu]]== <br />
{{:faq-ubuntu}}<br />
<br />
==[[faq-android|Android]]== <br />
{{:faq-android}}</div>Resetnow