Подробная инструкция по сборке 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. Обновляю минт: sudo apt-get update && sudo apt-get upgrade
1.2. Узнаю uuid, пригодиться: sudo blkid
1.3. Подключаю раздел где буду творить: sudo nano /etc/fstab и добавляю строчку
нет не возвращается, полный ахтунг, 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 - --- - ничего нельзя делать
циферки - это три отдельных атрибута:
7 - rwx - читать, писать, выполнять
6 - rw- - читаь, писать
5 - r-x - читать, выполнять
4 - r-- - читать
3 - -wx - писать, выполнять
2 - -w- - писать
1 - --x - выполнять
0 - --- - ничего нельзя делать
Первая цифра означает применения прав для пользователя,
Вторая - для группы
Третья - права для всех остальных
Для смены владельца файлов/каталогов используем chown:
sudo chown -R alex:users /develop
Вторая - для группы
Третья - права для всех остальных
Для смены владельца файлов/каталогов используем chown:
sudo chown -R alex:users /develop
где alex - имя пользователя
Проверяю: sudo mount -a && mount
Проверяю: sudo mount -a && mount
и вижу в последней строчке вывода команды:
/dev/sdc7 on /develop type ext4 (rw,relatime,discard,data=ordered)
все норм теперь при каждой загрузке будет автоматом подключен раздел.
/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 в оперативную память:
Кроме того это не сильно поможет нашему SSD, т.к. пакеты сжатые, а при установке занимают в 5-10 раз больше места, чем в архиве. Также это увеличит использование ОЗУ. После включения убедитесь, что в системе хватает памяти для выполнения ваших задач.
1.6. Проверка поддержки TRIM:
У меня выдало: * Data Set Management TRIM supported (limit 1 block) , значит все ок.
Не лишним будет отредактировать /etc/fstab:
Включаем TriM для SSD, sudo nano /etc/rc.local, там вставляем две строчки :
fstrim -v /
fstrim -v /home
1.7. Используем все ядра процессора чтобы при загрузке были задействованы все ядра. Для этого введите данную команду: sudo nano /etc/init.d/rc
После чего найдите следующую строчку:
CONCURRENCY=none
И замените её на такую:
CONCURRENCY=makefile
Сохраните файл и перезагрузитесь
#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.
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 после установки, по умолчанию не требует изменений.
Все теперь можете проверить запуск приложений. Скорость запуска должна увеличиться.
Следующая команда применит предварительное связывание ко всем выполняемым файлам: 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.bincd ~
sh ./jdk-6u45-linux-x64.bin
В результате появится каталог jdk1.6.0_45. Для удобства переименуем его в jdk.
mv jdk1.6.0_45 jdk
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 --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
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
echo 'PATH=$PATH:~/jdk/bin' >> .bashrc
echo 'PATH=$PATH:~/jdk/jre/bin' >> .bashrc
Проверяем: java -version
java version "1.6.0_45"2.2. Установка пакетов.
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
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 -scache 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 - имя пользователя
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
делаем: 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
Это будет довольно долгим процессом, нужно будет выкачать около 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 Результат.
Если все будет успешно будет такой вывод:
Удачи Вам в создании своей неповторимой прошивки !
Ресурсы где я черпал вдохновение:
3.5 Результат.
Если все будет успешно будет такой вывод:
Package Complete: /develop/CM11/out/target/product/hwmt1_u06/cm-11-20170107-UNOFFICIAL-hwmt1_u06.zipКомпиляция у меня заняла 1ч 45 м.
Удачи Вам в создании своей неповторимой прошивки !
Ресурсы где я черпал вдохновение:
Отправить комментарий