Archive

Archive for the ‘kernel’ Category

Exchanging experiences – Bluetooth <-> Linux Kernel

It’s time to develop Bluez!

Last month I started working on a new project at INdT. I’m going to help BlueZ development and the new features that are coming, Bluetooth Low Energy is the next generation of Bluetooth. At this moment Bluetooth SIG is still finishing specifications but I need to get used to BlueZ development and current Bluetooth protocol. I’ve been working with some small BlueZ features to get some experience with it. And I got some patches applied to bluez.git .

Part of our team has experience with Linux kernel development(INdT-Manaus) and some co-workers have good experience with BlueZ(INdT-Recife). Sharing this knowledge was something very important for the team. Now I’m in Recife learning a lot about BlueZ, Bluetooth and Obex with Claudio Takahasi and Vinicius Gomes.  :)

I prepared some material to introduce Linux kernel development. You can access this material HERE!

I’m very excited about this new project! It’s gonna be challenging! :D

Categories: bluez, evento, kernel Tags:

N810/N800 + Linux 2.6.33 + Ubuntu Karmic (ubuntu-minimal)

This week I got Ubuntu Karmic(ubuntu-minimal) working on N810/N800 with Linux kernel version 2.6.33. Serial, USB(g_ether) and flash memory are working fine with this version. It’s enough to use console over SSH and test some terminal applications. But it’s going to take time to get it working fully on n8x0 like linux-omap 2.6.29.

—————–

$ ssh ubuntu@10.0.1.10
ubuntu@10.0.1.10′s password:
Linux n810 2.6.33-rc8-07939-g4fe94ed-dirty #149 Fri Feb 26 14:58:22 AMT 2010 armv6l

ubuntu@n810:~$ cat /proc/cpuinfo | grep Hardware
Hardware    : Nokia N810
ubuntu@n810:~$ uname -a
Linux n810 2.6.33-rc8-07939-g4fe94ed-dirty #149 Fri Feb 26 14:58:22 AMT 2010 armv6l GNU/Linux
ubuntu@n810:~$ cat /etc/issue.net
Ubuntu 9.10

—————–

You can download images:

* linux 2.6.33 to n800/n810

* ubuntu karmic minimal image (just console over SSH)

* howto to create your own images

* patches, pkgs and etc

Some notes about Linux 2.6.33 with n8x0:

* Some corrections are necessary to get USB working.

* My kernel configuration define g_ether(USB gadget ethernet) as built-in(CONFIG_USB_ETH=y).

* initfs is not necessary. My kernel configuration changed to bootup directly by flash memory(CONFIG_CMDLINE=”root=1f04 rootfstype=jffs2 console=ttyS2,115200n8″).

* My personal linux-omap tree is available at gitorious

Some notes about ubuntu Karmic with n8x0:

* Generated using rootstock

* Correction to apt works correctly with JFFS2

* Workaround to startup USB interface(IP 10.0.1.10) automatically using udev

* Using openssh-client/server instead of dropbear(lightweight). Dropbear install fails :P

PS:
* Thanks to Stskeeps, luke-jr from #mer at irc.freenode.net !

* rbelem, post done. enjoy it! :D http://www.rbelem.info/

* Doubts, questions or comments? Post it here or use #ubuntu-arm at irc.freenode.net

Categories: kernel, n810, omap, ubuntu Tags:

Preparing Mamona 0.3 – sync with OpenEmbedded (alpha)

Hi folks,

After a long time working on internal projects, we got time to work on Mamona development. The main goal is get it working on OpenEmbedded.git tree and use OE directly.

Main contributions in our patches:

* Linux-omap kernel 2.6.29 working fine N800 and N810

* N8x0 Wlan working with opensource driver(stlc45xx)

* N810 sound working with opensource driver (OMAP ASoC) and ALSA changes

* N810 with Fn key working correctly

* Xserver-kdriver-xomap – xserver-kdrive with custom changes to n8x0

* Linux-omap kernel  2.6.30 to Nokia 770 (unstable)

* Mplayer-Maemo – Mplayer with custom changes to n8x0

* Eve – Web browser based on Webkit-EFL

* Basic SDK chroot (use mamona-chroot)

* Ofono – Open Source telephony

* Antico – lightweight window manager based on Qt X11

* Others minor changes.

Current development:  http://gitorious.org/mamona

I created flashable images that are available on HERE.

Platform developers can use this quick howto to build Mamona latest version.

Now it’s time to review changes and submit to Openembedded.

You can see more pictures and videos of Mamona with N810 using the links

* More pictures of Mamona 0.3 (alpha)

* Videos:

Categories: kernel, mamona, n810 Tags:

Debian Day 09 – Iniciando no desenvolvimento do kernel Linux

Olá pessoal,

Vou realizar uma oficina sobre desenvolvimento do kernel Linux no Debian Day 09 aqui em MAO. Já defini os tópicos que pretendo abordar. Acredito que estes tópicos sejam os primeiros passos para alguém que tem interesse no kernel Linux.

Informações sobre:

* A oficina – http://franciscoalecrim.com/wiki/index.php?title=DebianDay09-AM

* O evento – http://diadebian.org/am/2009/?p=debianday

Na sexta-feira publicarei o material da oficina.

[]‘s

Alecrim

Categories: debian, evento, kernel Tags:

fisl10: palestra aprovada

EU VOU !!

EU VOU !!

Confirmei minha presença no FISL10. Serei PALESTRANTE!! \o/

Estou muito feliz com a aprovação de UMA das 3 palestras que submeti.

As palestras recusadas tiveram críticas válidas e concordo com a rejeição das mesmas. :P

Agradeço aos avaliadores !!!

Vejo você no FISL10!!!

Categories: evento, kernel, mamona Tags:

kernel contributions till 2008 04 04

Kernel contributions : OMAP

I should improve it. :P

Categories: kernel, omap Tags:

Proposta de Palestra para o FISL 9.0 – 2008

Proposta de Palestra para o FISL 9.0 – 2008
Autor: Francisco Keppler Silva Alecrim

Curriculum

Formado em Ciência de Computação pela Universidade Federal do Amazonas, onde trabalhou com administração de servidores Linux e Voz sobre IP. Desenvolvedor do Instituto Nokia de Tecnologia, onde trabalha com automação de testes e desenvolvimento do kernel do Linux na plataforma OMAP.

Proposta de palestra

Título:

Configurando um ambiente de desenvolvimento no computador pessoal para a plataforma Linux OMAP.

Público alvo:

Desenvolvedores interessados em iniciar desenvolvimento no kernel do Linux em ambiente embarcado, baseado na plataforma OMAP.

Descrição:

Os microprocessadores OMAP são de propriedade da Texas Instrument e foram desenvolvidos com o objetivo de serem utilizados com aplicações multimídia. A utilização de microprocessadores OMAP pode ser vista em telefones celulares, smartphones, PDAs e handhelds. Algumas das arquiteturas OMAP são dual-core contendo um processador de propósito geral ARM e um ou mais DSP. Os microprocessadores são lançados no mercado em plataformas de desenvolvimento, deste modo, as empresas interessadas podem testar e desenvolver softwares utilizando o processador presente na plataforma de desenvolvimento, antes de iniciarem a fabricação dos futuros dispositivos baseados no OMAP.
O OSK(OMAP5912 Starter Kit) é um exemplo de conjunto que permite o contato com uma plataforma de desenvolvimento OMAP. O OMAP5912 é indicado para terminais portáteis de dados, como dispositivos médicos portáteis e pontos de verificação de preço. A linha de microprocessadores que é indicada para handsets and PDAs possui outras plataformas de desenvolvimento, como o OMAP1611, OMAP1710 e OMAP2420. Todas as plataformas citadas possuem portes do kernel Linux,sendo os procedimentos para teste e utilização do kernel Linux em uma plataforma de desenvolvimento OMAP são muito semelhantes.
A configuração de um ambiente de desenvolvimento para a plataforma OMAP será abordada nesta palestra, incluindo atividades de configuração de u-boot, cross-compiler e kernel OMAP. Além disso, ferramentas que facilitam o trabalho com a comunidade são também apresentadas como o Git, Ctags, Cscope e Vim.
Durante a palestra será realizada uma apresentação do OSK com o kernel do Linux, expondo também a minha experiência de trabalho com a comunidade do Linux-OMAP.
Resumo:

Os microprocessadores OMAP são utilizados em diversos dispositivos móveis como telefones celulares, PDAs, smartphones e handhelds. Esta apresentação descreve os procedimentos de configuração e utilização do kernel Linux em uma plataforma de desenvolvimento OMAP, com demonstrações em um OSK(OMAP5912 Starter Kit).

Referências:

http://en.wikipedia.org/wiki/Texas_Instruments_OMAP

http://www.ti-estore.com/Merchant2/merchant.mvc?Screen=PROD&Product_Code=TMDSOSK5912

http://www.muru.com/linux/omap/

http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&navigationId=11988&contentId=4638

http://en.wikipedia.org/wiki/ARM_architecture

http://tree.celinuxforum.org/CelfPubWiki/OSK

http://elinux.org/OSK

Categories: evento, kernel Tags:

aprendendo linux kernel

Inicie a leitura do Linux Device Drivers (http://lwn.net/Kernel/LDD3/);

Aprenda a compilar um kernel (http://www.falkotimme.com/howtos/debian_kernel2.6_compile/);

Aprenda a testar um kernel de maneira segura,
usando Qemu(http://franciscoalecrim.blogspot.com/2007/08/howto-debian-qemu-running-debian-inside.html);

if (você achar muito ruim fazer isto, fica difícil. você vai ter que fazer isto várias vezes, melhor se acostumar){
ret=-1;
goto erro;
}

Aprenda a trabalhar com modulos, hello_world
(http://osmrc.indt.org/keppler/techday_joinville_2007/ && http://tldp.org/LDP/lkmpg/2.6/html/index.html);

Aprenda um pouco sobre procfs
(http://osmrc.indt.org/keppler/techday_joinville_2007/);

Aprenda sobre drivers
(http://www.freesoftwaremagazine.com/articles/drivers_linux?page=0%2C0);

Aprenda git (http://www.kernel.org/pub/software/scm/git/docs/tutorial.html);

Nao esqueça de continuar lendo o livro
(http://lwn.net/Kernel/LDD3/);

erro:
Vlw!!!
return ret;

Categories: kernel Tags:

Submetendo PATCHES para o Kernel Linux

Baseado em Documentation/SubmittingPatches do código fonte do kernel Linux

1 – Criando e enviando suas mudanças

diff -pruN arvore_original arvore_modificado > meu_patch

2 – Descreva o suas alterações

Seja simples e objetivo, descrevendo os detalhes tecnicos.

3 – Separe as alterações

Se você deseja fazer uma correção em um driver A e depois
uma outra alterção em um driver B. Separe em 2 patches para ficar mais organizado.

4 – Verifique o estilo

Verifique o estilo de seu patch. Utilize scripts/checkpatch.pl para checagem.

5 – Selecione o destino

Procure os mantenedores e envie os patches para as pessoas corretas.

6 – Copie a lista

CC a mailing list.

7 – No MIME, no links, no compression, no attachments. Just plain text.

Não preciso explicar mais nada. :P

8 – Limite de tamanho

Se o seu patch é maior que 40kb, é melhor deixar ele na web e mandar a URL.

9 – Kernel version

Mandar a versao do kernel, caso não seja a current.

10 – Não perca a coragem, re-envie.

11 – Inclua PATCH no subject.

12 – Assine seus patches.

13 – Acked-by para o revisor.

14 – O formato canonical

Minha dica pra isto é USE GIT. Ele já deixa os patches no formato.

git-format-patch -1

Tips and tricks
1 – Leia o CodingStyle
2 – #ifdefs são feios
3 – static inline é melhor que macro
4 – “Faça as coisas o mais simples possível,mas não mais simples” Albert Einstein

Categories: kernel Tags:

Estilo de código no Kernel Linux

Baseado em Documentation/CodingStyle do kernel do Linux

1 – Indentação de 8 characteres

Exemplo:

if (x is true) {        we do y}

2 – Linhas podem possuir apenas 80 colunas

Exemplo:

 printk(KERN_WARNING "Warning this is a long printk with "   "3 parameters a: %u b: %u "   "c: %u \n", a, b, c);

3 – Localização de Chaves
Localizacao das chaves deve ser na ultima coluna do primeira linha e na
primeira coluna da ultima linha

if (x is true) {        we do y}

4 – Nomes de variaveis

LOCAIS devem ser curtas e simples
exemplo: tmp
GLOBAIS devem ser bem descritas, evitando contrações
exemplo: count_active_users()

5 – Evita typedefs.

Evite utilizar typedefs para ponteiros e estruturas, tornando o código
mais complicado.

Exemplo: “struct virtual_container *a;” é muito mais claro do que “vps_t a;”

6 – Funtions devem ser curtas e claras.

Condições:

  6.1 - Dimensões (80x24)  6.2 - Não mais do que 5-10 variáveis.  6.3 - Sem isto, você provavelmente está fazendo algo errado.

7 – Centralizar saída de funções.

GOTO não é péssima prático como muitos dizem.

Exemplo:

int fun(int a){       int result = 0;       char *buffer = kmalloc(SIZE);

       if (buffer == NULL)               return -ENOMEM;

       if (condition1) {               while (loop1) {                       ...               }               result = 1;               goto out;       }       ...out:       kfree(buffer);       return result;}

8 – Comentar é bom, mas NÃO EXAGERE.

Seu código deve ser claro, por isto não coloque no comentário explicações
sobre como seu cógigo funciona.
Veja: Documentation/kernel-doc-nano-HOWTO.txt

9 – Dica pro pessoal que usa emacs.

Eu uso VIM. :P

10 – Configuração no Kconfig

Definições são indentadas com TAB e help com 2 espaços.

11 – Estruturas de dados.

No kernel não tem garbage collector para corrigir suas porcarias.
Se você sujou então vai ter que limpar. Não esqueça que sua estrutura
pode ser acessada por outra thread, por isto lembre de realizar controle
ou você terá um bug.

12 – Macros
Macros devem ser escritas em letras MAIUSCULAS.

13 – Printing messages

Cuidados com erros de escrita nas mensagens.

14 – Alocando memoria

O kernel possui diversas formas de alocação de memória. A forma mais
recomendada de passar o tamanho memória que deve ser alocado é:

p = kmalloc(sizeof(*p), …);

15 – Funções inline

Neste tópico ele desistimula a utilização de funções inline.

16 – Funções retornam valores ou nomes

0 = sucesso
-Exxx = falhou :P

17 – Não re-invente macros

18 – Editor modelines

Não adicionei configurações para o seu editor em código fontes.

Comentários e correções são bem vindos em alecrim@gmail.com

Categories: kernel Tags: