blob: 10d117407b4e4141069c6a0505a4c8563b09f9ca [file] [log] [blame]
<html devsite><head>
<title>Como criar kernels</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>
Esta página detalha como criar apenas o <a href="/devices/architecture/kernel/">kernel</a>. As instruções a seguir presumem que você não fez o download de todo o AOSP. Se você já fez isso, pule para as etapas <code>git clone</code>, exceto a etapa que faz o download das origens do kernel.
</p>
<p>Todos os exemplos nesta seção usam o kernel do <a href="devices.html#hikey-boards">hikey</a>.</p>
<h2 id="figuring-out-which-kernel-to-build">Como selecionar um kernel</h2>
<p>Esta tabela lista o nome e os locais dos binários e origens de kernel:
<table>
<tbody><tr>
<th>Dispositivo</th>
<th>Local do binário</th>
<th>Local da origem</th>
<th>Configuração da versão</th>
</tr>
<tr>
<td>blueline</td>
<td>device/google/crosshatch-kernel</td>
<td><a href="#building-b1c1">instruções</a></td>
<td>b1c1_defconfig</td>
</tr>
<tr>
<td>crosshatch</td>
<td>device/google/crosshatch-kernel</td>
<td><a href="#building-b1c1">instruções</a></td>
<td>b1c1_defconfig</td>
</tr>
<tr>
<td>taimen</td>
<td>device/google/wahoo-kernel</td>
<td>kernel/msm</td>
<td>wahoo_defconfig</td>
</tr>
<tr>
<td>walleye</td>
<td>device/google/wahoo-kernel</td>
<td>kernel/msm</td>
<td>wahoo_defconfig</td>
</tr>
<tr>
<td>easel</td>
<td>N/A</td>
<td>kernel/arm64</td>
<td>mnh_prod_defconfig</td>
</tr>
<tr>
<td>marlin</td>
<td>device/google/marlin-kernel</td>
<td>kernel/msm</td>
<td>marlin_defconfig</td>
</tr>
<tr>
<td>sailfish</td>
<td>device/google/marlin-kernel</td>
<td>kernel/msm</td>
<td>marlin_defconfig</td>
</tr>
<tr>
<td>hikey</td>
<td>device/linaro/hikey-kernel</td>
<td>kernel/hikey-linaro</td>
<td>hikey_defconfig</td>
</tr>
<tr>
<td>angler</td>
<td>device/huawei/angler-kernel</td>
<td>kernel/msm</td>
<td>angler_defconfig</td>
</tr>
<tr>
<td>bullhead</td>
<td>device/lge/bullhead-kernel</td>
<td>kernel/msm</td>
<td>bullhead_defconfig</td>
</tr>
<tr>
<td>shamu</td>
<td>device/moto/shamu-kernel</td>
<td>kernel/msm</td>
<td>shamu_defconfig</td>
</tr>
<tr>
<td>fugu</td>
<td>device/asus/fugu-kernel</td>
<td>kernel/x86_64</td>
<td>fugu_defconfig</td>
</tr>
<tr>
<td>volantis</td>
<td>device/htc/flounder-kernel</td>
<td>kernel/tegra</td>
<td>flounder_defconfig</td>
</tr>
<tr>
<td>hammerhead</td>
<td>device/lge/hammerhead-kernel</td>
<td>kernel/msm</td>
<td>hammerhead_defconfig</td>
</tr>
<tr>
<td>flo</td>
<td>device/asus/flo-kernel/kernel</td>
<td>kernel/msm</td>
<td>flo_defconfig</td>
</tr>
<tr>
<td>deb</td>
<td>device/asus/flo-kernel/kernel</td>
<td>kernel/msm</td>
<td>flo_defconfig</td>
</tr>
<tr>
<td>manta</td>
<td>device/samsung/manta/kernel</td>
<td>kernel/exynos</td>
<td>manta_defconfig</td>
</tr>
<tr>
<td>mako</td>
<td>device/lge/mako-kernel/kernel</td>
<td>kernel/msm</td>
<td>mako_defconfig</td>
</tr>
<tr>
<td>grouper</td>
<td>device/asus/grouper/kernel</td>
<td>kernel/tegra</td>
<td>tegra3_android_defconfig</td>
</tr>
<tr>
<td>tilapia</td>
<td>device/asus/grouper/kernel</td>
<td>kernel/tegra</td>
<td>tegra3_android_defconfig</td>
</tr>
<tr>
<td>maguro</td>
<td>device/samsung/tuna/kernel</td>
<td>kernel/omap</td>
<td>tuna_defconfig</td>
</tr>
<tr>
<td>toro</td>
<td>device/samsung/tuna/kernel</td>
<td>kernel/omap</td>
<td>tuna_defconfig</td>
</tr>
<tr>
<td>panda</td>
<td>device/ti/panda/kernel</td>
<td>kernel/omap</td>
<td>panda_defconfig</td>
</tr>
<tr>
<td>stingray</td>
<td>device/moto/wingray/kernel</td>
<td>kernel/tegra</td>
<td>stingray_defconfig</td>
</tr>
<tr>
<td>wingray</td>
<td>device/moto/wingray/kernel </td>
<td>kernel/tegra</td>
<td>stingray_defconfig</td>
</tr>
<tr>
<td>crespo</td>
<td>device/samsung/crespo/kernel</td>
<td>kernel/samsung</td>
<td>herring_defconfig</td>
</tr>
<tr>
<td>crespo4g</td>
<td>device/samsung/crespo/kernel</td>
<td>kernel/samsung</td>
<td>herring_defconfig</td>
</tr>
</tbody></table>
</p><p>Depois de determinar o projeto do dispositivo com que você quer trabalhar, veja o log do git para o binário do kernel. Os projetos de dispositivos usam o formato <code>device/<var>VENDOR</var>/<var>NAME</var></code>.</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">git clone https://android.googlesource.com/kernel/hikey-linaro</code>
<code class="devsite-terminal">cd hikey-linaro</code>
<code class="devsite-terminal">git log --max-count=1 kernel</code>
</pre>
<p>A mensagem de confirmação do binário do kernel contém um log de git parcial das origens do kernel usadas para criar o binário. A primeira entrada do log é a mais recente (aquela usada para criar o kernel). Anote a mensagem de confirmação, porque você precisará dela posteriormente.</p>
<h2 id="id-version">Como identificar a versão do kernel</h2>
<p>Para determinar a versão do kernel usada em uma imagem do sistema, execute o seguinte comando no arquivo do kernel:</p>
<pre class="devsite-terminal devsite-click-to-copy">
dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version'
</pre>
<p>Para o Nexus 5 (hammerhead), o comando é:</p>
<pre class="devsite-terminal devsite-click-to-copy">
dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version'
</pre>
<h2 id="downloading-sources">Como fazer o download das origens</h2>
<p>Faça o download da origem para o kernel que você quer criar usando o comando <code>git clone</code> apropriado. Por exemplo, o comando a seguir clona o kernel <code>common</code>, um kernel genérico e personalizável:</p>
<pre class="devsite-terminal devsite-click-to-copy">
git clone https://android.googlesource.com/kernel/common
</pre>
<p>Uma lista completa dos projetos do kernel pode ser encontrada no diretório <a href="https://android.googlesource.com/kernel">Kernel</a>. Veja abaixo alguns dos kernels mais usados e os respectivos comandos <code>git clone</code>.</p>
<p>O projeto <code>exynos</code> tem as origens do kernel para Nexus 10 e pode ser usado como um ponto de partida para trabalhar com chipsets do Samsung Exynos.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/exynos</pre>
<p>O projeto <code>goldfish</code> contém as origens do kernel para as plataformas emuladas.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/goldfish</pre>
<p>O projeto <code>hikey-linaro</code> é usado para placas de referência HiKey e pode ser usado como ponto de partida para trabalhar com chipsets HiSilicon 620.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/hikey-linaro</pre>
<p>O projeto <code>msm</code> tem as origens para ADP1, ADP2, Nexus One, Nexus 4, Nexus 5, Nexus 6, Nexus 5X, Nexus 6P, Nexus 7 (2013), Pixel e Pixel XL e pode ser usado como ponto de partida para trabalhar com chipsets Qualcomm MSM.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/msm</pre>
<p>O projeto <code>omap</code> é usado para o PandaBoard e o Galaxy Nexus e pode ser usado como ponto de partida para trabalhar com chipsets TI OMAP.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/omap</pre>
<p>O projeto <code>samsung</code> é usado para o Nexus S e pode ser usado como ponto de partida para trabalhar com chipsets Samsung Hummingbird.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/samsung</pre>
<p>O projeto <code>tegra</code> destina-se ao Xoom, Nexus 7 (2012), Nexus 9 e pode ser usado como ponto de partida para trabalhar com chipsets NVIDIA Tegra.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/tegra</pre>
<p>O projeto <code>x86_64</code> tem as origens de kernel para o Nexus Player e pode ser usado como um ponto de partida para trabalhar com chipsets Intel x86_64.</p>
<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/x86_64</pre>
<h2 id="building">Como criar o kernel manualmente</h2>
<p>Depois de ver a última mensagem de confirmação de um kernel e fazer o download da origem do kernel e do gcc pré-criado, você poderá criar o kernel. Os comandos de criação a seguir usam o kernel do hikey:</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">export ARCH=arm64</code>
<code class="devsite-terminal">export CROSS_COMPILE=aarch64-linux-android-</code>
<code class="devsite-terminal">cd hikey-linaro</code>
<code class="devsite-terminal">git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1</code>
<code class="devsite-terminal">make hikey_defconfig</code>
<code class="devsite-terminal">make</code>
</pre>
<p>Para criar um kernel diferente, basta substituir <code>hikey-linaro</code> pelo nome do kernel que você quer criar.</p>
<p>A imagem vai para o diretório <code>arch/arm64/boot/Image</code>, e os binários do kernel vão para o arquivo <code>arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb</code>. Copie o diretório <code>Image</code> e o arquivo <code>hi6220-hikey.dtb</code> para o diretório <code>hikey-kernel</code>.</p>
<p>Outra alternativa é incluir a variável <code>TARGET_PREBUILT_KERNEL</code> ao usar <code>make bootimage</code> (ou qualquer outra linha de comando <code>make</code> que crie uma imagem de inicialização). Essa variável é compatível com todos os dispositivos, porque ela é configurada por <code>device/common/populate-new-device.sh</code>.
Exemplo:</p>
<pre class="devsite-terminal devsite-click-to-copy">
export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb
</pre>
<p class="note"><strong>Observação</strong>: os nomes do kernel diferem de acordo com o dispositivo. Para localizar o nome de arquivo correto do seu kernel, consulte <code>device/<var>VENDOR</var>/<var>NAME</var></code> na origem do kernel.</p>
<h2 id="building-b1c1">Como criar kernels do Pixel 3 (blueline) e Pixel 3 XL (crosshatch)</h2>
<p>Para o Pixel 3 e o Pixel 3 XL, a origem do kernel é separada em vários projetos. Use o <a href="/setup/develop/repo#init">repo</a> para fazer o download da origem do kernel para o branch adequado (até o presente momento, <code><var>VERSION</var></code> deve ser <code>4.9-pie-qpr1</code>):</p>
<pre class="devsite-terminal devsite-click-to-copy">repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-bluecross-$<var>VERSION</var></pre>
<pre class="devsite-terminal devsite-click-to-copy">repo sync</pre>
<p>Em seguida, crie o kernel com:</p>
<pre class="devsite-terminal devsite-click-to-copy">sh build/build.sh</pre>
</body></html>