Сборка прошивки от А до Я

Подробная инструкция по сборке CyanogenMod 11 из исходного кода.
(рабочая)

Началось время каникул в связи сезонным спадом заказов заказов на предприятии. Санкции чтоб их. Надо чем то себя занять.

Решил создать отдельную страницу в первую очередь как памятку для себя, может будет кому полезно, прошу не судить строго.

Итак что имеем:

  • Новенькую и блестящую, прямо с пыла жара поставленную Linux Mint 18.1-cinnamon-64bit установленную на SSD KINGSTON SV300S37A120G (120 ГБ, SATA-III) отвел для неё ~30 Gb, так как рядом ещё ютиться десятка, думаю хватит т.к есть ещё два обычных жестких диска, компилировать буду на одном из них.
  • 8-и головый  AMD FX-8320E, 3523 MHz.
  • Памяти 16 Gb (DDR3 SDRAM).
Кстати надо будет замерить время компилирования, раньше был 3-х ядерный атлон с 8 Гб памяти, если не ошибаюсь занимало 4-5 ч.

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

Красным обозначены команды вводимые в терминале.
Оранжевым что редактируем.

 1. Для начала причесываю минт:

1.1. Обновляю минт: sudo apt-get update && sudo apt-get upgrade

1.2. Узнаю uuid, пригодитьсяsudo blkid

1.3. Подключаю раздел где буду творить: sudo nano /etc/fstab и добавляю строчку
UUID=20eca163-a539-4ca6-8e21-2ac5b8983262 /develop ext4 rw,relatime,discard,data=ordered 0 2
Ctrl+O сохранить,  Ctrl+X выход,
где 20eca163-a539-4ca6-8e21-2ac5b8983262 и есть uuid раздела из команды sudo blkid

1.4. Создаю папку куда будет монтироваться нужный мне раздел: sudo mkdir /develop
Устанавливаю права доступа на запись в папку и на все подпапки и файлы:
sudo chmod -R 755 /develop
смена прав, -R рекурсивно, т.е. изменит и то, что внутри каталога develop
циферки - это три отдельных атрибута:

7 - rwx - читать, писать, выполнять
6 - rw- - читаь, писать
5 - r-x - читать, выполнять
4 - r-- - читать
3 - -wx - писать, выполнять
2 - -w- - писать
1 - --x - выполнять
0 - --- - ничего нельзя делать

Первая цифра означает применения прав для пользователя,
Вторая - для группы
Третья - права для всех остальных

Для смены владельца файлов/каталогов используем chown:
sudo chown -R alex:users /develop
где alex - имя пользователя
Проверяю: sudo mount -a && mount 
и вижу в последней строчке вывода команды:
/dev/sdc7 on /develop type ext4 (rw,relatime,discard,data=ordered)
все норм теперь при каждой загрузке будет автоматом подключен раздел.

1.5. Как всем известно SSD очень быстры, но имеют один маленький (или не маленький) недостаток - ограниченное число циклов записи. Т.е. их надо стараться больше использовать на чтение, а запись свести к минимуму, дабы свести риск выхода из строя диска раньше времени к минимуму. Если уж SSD приобретен, то вполне можно добавить памяти в машину и отключить swap. Для этого будет достаточно уже 4GiB (используйте утилиты free и top, чтобы узнать сколько памяти потребляет ОС) Если памяти достаточно, ставим систему без свопа или отключаем его, если система уже установлена. Комментируем (#) строку со словом swap в файле /etc/fstab.
#UUID=xxxx-xxxx-xxxx-xxxx none swap sw 0 0
Кэш apt в ОЗУ и переносим раздел tmp в оперативную память:

tmpfs    /var/cache/apt/archives    tmpfs    defaults 0        0
tmpfs   /tmp    tmpfs   defaults        0       0
Эти строчки добавляем в /etc/fstab. Кэш apt не будет сохраняться на диске и при переустановке пакетов, потребуется их выкачивать заново также переносим раздел tmp в оперативную память
Кроме того это не сильно поможет нашему SSD, т.к. пакеты сжатые, а при установке занимают в 5-10 раз больше места, чем в архиве. Также это увеличит использование ОЗУ. После включения убедитесь, что в системе хватает памяти для выполнения ваших задач.

1.6. Проверка поддержки TRIM:
sudo hdparm -I /dev/sdX | grep -i trim
где sdX - ваш SSD.
У меня выдало: * Data Set Management TRIM supported (limit 1 block) , значит все ок.
Не лишним будет отредактировать /etc/fstab:


  • noatime,nodiratime,discard (Defaults - этот убираем)- для EXT4.
  • noatime,ssd (Defaults - этот убираем)  - для btrFS.

Включаем TriM для SSD, sudo nano /etc/rc.local, там вставляем две строчки :
fstrim -v /
fstrim -v /home


1.7. Используем все ядра процессора чтобы при загрузке были задействованы все ядра. Для этого введите данную команду: sudo nano /etc/init.d/rc
После чего найдите следующую строчку:
CONCURRENCY=none
И замените её на такую:
CONCURRENCY=makefile
Сохраните файл и перезагрузитесь

1.8. Уменьшение использования файла подкачки если есть (перезагрузка):echo -e "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

1.9. Установка программ для увеличения скорости запуска программ.

Для начала установим prelink и preload для ускорения запуска программ. Prelink преобразовывает разделяемые библиотеки и выполняемые файлы чтобы уменьшить количество переадресаций библиотек. Preload кеширует часто запускаемые программы и библиотеки в памяти системы. После некоторого использования демон составляет список часто запускаемых программ и будет держать их в памяти для повторных запусков, что позволит ускорить их запуск.
Примечание. Кеш (Cache) — накопитель, быстродействующая память, куда складываются программы, с которыми вы работаете.
Установка и настройка Prelink.
Выполните следующую команду в терминале для установки:sudo apt-get install prelink
Следующая команда применит предварительное связывание ко всем выполняемым файлам: sudo prelink --all
Для периодического запуска демона нужно отредактировать файл prelink, открыв его следующей командой в текстовом редакторе:
sudo nano /etc/default/prelink
Найдите строку и измените параметр:PRELINKING=unknown на PRELINKING=yes
А теперь выполним запуск демона прелинка: sudo /etc/cron.daily/prelink
Установка Preload.
В терминале делаем: sudo apt-get install preload
Как правило, конфигурация preload после установки, по умолчанию не требует изменений.
Все теперь можете проверить запуск приложений. Скорость запуска должна увеличиться.

2. Установка нужных пакетов и их настройка.

2.1. Установка JDK(Java Development Kit).

Скачиваем в домашнию папку файл jdk-6u45-linux-x64.bin. Скачиваем здесь (Контрольная сумма (MD5): 40c1a87563c5c6a90a0ed6994615befe), либо регистрируемся на сайте http://www.oracle.com и переходим на:

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html
и скачиваем там.

Далее в терминале набираем:

cd ~
chmod +x ./jdk-6u45-linux-x64.bin
sh ./jdk-6u45-linux-x64.bin

В результате появится каталог jdk1.6.0_45. Для удобства переименуем его в jdk.
mv jdk1.6.0_45 jdk

Далее конфигурируем Java:

sudo update-alternatives --install /usr/bin/java java ~/jdk/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac ~/jdk/bin/javac 1
sudo update-alternatives --install /usr/bin/javaws javaws ~/jdk/bin/javaws 1
sudo update-alternatives --install /usr/bin/javadoc javadoc ~/jdk/bin/javadoc 1
sudo update-alternatives --install /usr/bin/javah javah ~/jdk/bin/javah 1
sudo update-alternatives --install /usr/bin/javap javap ~/jdk/bin/javap 1
sudo update-alternatives --install /usr/bin/jar jar ~/jdk/bin/jar 1
sudo update-alternatives --install /usr/bin/javac javac ~/jdk/bin/javac 1

sudo update-alternatives --config java # выбираем /home/<ваше имя >/jdk/bin/java
sudo update-alternatives --config javac # выбираем /home/<ваше имя >/jdk/bin/javac
sudo update-alternatives --config javaws # выбираем /home/<ваше имя >/jdk/bin/javaws
sudo update-alternatives --config javadoc # выбираем /home/<ваше имя >/jdk/bin/javadoc
sudo update-alternatives --config javah # выбираем /home/<ваше имя >/jdk/bin/javah
sudo update-alternatives --config javap # выбираем /home/<ваше имя >/jdk/bin/javap
sudo update-alternatives --config jar # выбираем /home/<ваше имя >/jdk/bin/jar

export PATH=$PATH:~/jdk/bin
export PATH=$PATH:~/jdk/jre/bin
echo 'PATH=$PATH:~/jdk/bin' >> .bashrc
echo 'PATH=$PATH:~/jdk/jre/bin' >> .bashrc


Проверяем: java -version


java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
2.2. Установка пакетов.

sudo apt-get install -y htop mc wget ccache git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk3.0-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline6-dev libxml2-utils u-boot-tools libc6-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev mingw-w64 tofrodos python-markdown xsltproc

Необходимо будет скачать 142 MБ архивов. После данной операции, объём занятого дискового пространства возрастёт на 794 MB (у меня так, т.к некоторые пакеты уже были). Это займет кокое-то время.

2.3 Настраиваем ccache:

echo 'PATH=$PATH:/usr/lib/ccache' >> .bashrc
проверяем: ccache -s

выхлоп:

cache directory /home/alex/.ccache
primary config /home/alex/.ccache/ccache.conf
secondary config (readonly) /etc/ccache.conf
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0.0 kBmax cache size 5.0 GB

3. Сборка прошивки.

3.1. Качаем исходники.

если не будет прав доступа в папку /develop, повторяем:
sudo chmod -R 755 /develop
sudo chown -R alex:users /develop
где alex - имя пользователя

mkdir ~/bin
PATH=~/bin:$PATH
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo


mkdir /develop/CM11
cd /develop/CM11
repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0

Появиться ошибка:fatal: unable to auto-detect email address (got 'alex@GA-970A-DS3.(none)')
делаем: git config --global user.email "you@example.com"
где you@example.com - ваша почта.
повторяем:  repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
и подтвердить.

repo sync -j2 -f


Это будет довольно долгим процессом, нужно будет выкачать около 30 Gb

3.2. Инициализация окружения.

.build/envsetup.sh

3.3 Дерево устройства.

Скачиваем мое готовое дерево для CM11 - mate-CM11-kk-1.5.3.zip.

Распаковываем все содержимое этого архива в папку /develop/CM11, соглашаемся с заменой файлов.

Готовое ядро и все последние изменения что я делал для CM11, уже находяться в этом файле "mate-CM11-kk-1.5.3.zip". Если есть желание и Вы знаете что делаете (поправить, наложить патчи, поменять ядро, какие нибудь косметические изменения и тд и тп), Вы можете вносить любые изменения в каталоге /develop/CM11, но настоятельно не рекомендую трогать скрытую папку "/develop/CM11/.repo", дабы не пришлось все скачивать по новой.
Компиляция ядра - это отдельная тема.

3.4 Сборка.

./vendor/cm/get-prebuilts
. build/envsetup.sh && time brunch hwmt1_u06
где time - покажет сколько времени компилировалась прошивка (можно без него).

3.5 Результат.
Если все будет успешно будет такой вывод:
Package Complete: /develop/CM11/out/target/product/hwmt1_u06/cm-11-20170107-UNOFFICIAL-hwmt1_u06.zip
Компиляция у меня заняла 1ч 45 м.

Удачи Вам в создании своей неповторимой прошивки !

Ресурсы где я черпал вдохновение:

(с) mrAlmid. Технологии Blogger.