Hello and welcome to NewsClick and People's Dispatch. The U.S. election results are still being tabulated. The elections were held on November 3rd, of course, and the results are still not out. There's still not too much clarity at this point. It looks like Joe Biden definitely ahead, but things could still change at any point of time. Today we are very lucky to be joined by Claudia de la Cruz of the People's Forum in New York. And Claudia is one person I'm not going to ask if she's surprised about what's happening because just the day before the election, she had written an article called What the U.S., talking about what the U.S. working class could expect, and she had pretty much predicted what's happening that there would be no conclusive results. There would be armed gangs, protest groups on the streets, in some cases, Trump supporters saying stop the counting in some other cases, saying continue the counting. So it's a mess, and Claudia had very accurately predicted some of these phenomena. Claudia, thank you so much for joining us. It's a pleasure to be with you on People's Dispatch. Right, Claudia. So I wanted to ask, over the past two days, especially what we are seeing right now, what exactly does it show about the nature of U.S. institutions? Because, of course, it's an election, millions of people voted. It's a democracy, and now it's boiled down to a few thousand votes here and there, and there's utter confusion. It's a bourgeois democracy. It's a crippled democracy, and it's really a disgrace, and it's such a dangerous disgrace what's happening in the United States right now. I mean, the institution itself is not ready for millions and millions of people to vote and actually count those votes in time for folks to know who the president is. That's disgraceful. I mean, if this wasn't to be happening in any other part of the world, the United States would be calling for folks to go observe the elections somewhere else, right? And so, unfortunately, it talks a lot about what's been happening for decades. The conversation around voter suppression is something that a lot of states, particularly in the South, have been bringing up for many years, and it has its roots in slavery, in the institution of slavery, and so we are coming to terms with the strong legacy of slavery in the United States, where you are able to see the many ways in which this country has placed barriers for people to exercise popular democracy. It's crazy and it's appalling to see that the Democrats are also utilizing what they have been also a part of. I mean, they've also been part of voter suppression for many years, and the idea that Trump is the one person that is actually becoming an obstacle for folks to exercise democracy is just false. And I think it's important for us to understand that, I mean, it would be important also to understand that Biden is over here saying, and his campaign is saying, well, this is the largest number of votes that any Democrat has received in the history. Well, there's a history to that as well. It's not that he's gained those numbers because he has an actual plan to save the working class, which is the majority of the people in the United States. I mean, if they wanted really to have that type of wave that they talked about, they would have chosen Bernie in April, right? Because it's promises. There's no plan. And this is what has been happening with the Democratic Party for many, many years. And so when Biden speaks about this overwhelming number of votes, it's not a vote for Biden. These are votes against Trump. There's a large anti-Trump coalition that goes from very left progressive liberal center. He cannot assume that this is only based on the persona of Biden or Harris or even the Democratic Party machinery. It's beyond that. And so it's unfortunate to see what's happening in the streets right now in New York yesterday. There were folks that are coming out demanding that all votes be counted. There were protests also in Detroit. Some of the Trump supporters took over one of the locations where folks were counting the votes. And so, you know, that's really disheartening, but it's not surprising. I mean, the four years of presidency of Trump have unleashed, you know, why supremacist groups that are not going to go home if Biden wins. So we're still going to have chaos in the street. We're still going to have major challenges as social movements because what they, the campaign, Biden's campaign has been good at, which has happened also historically, is co-opting and absorbing a lot of the unrest, you know, the righteous discontent of people and placing them into this anti-Trump campaign that is focused on getting Trump out, which we all want Trump out. And yet we also want systemic change. And we know. So it's just, it's a mess. I was, I was referring earlier as a UNO game, right? Take two, draw four, reverse, like that's what we've been kind of dealing with for the last two days. And most likely we won't stop this charade in this game till tomorrow because there's still states that are counting votes and, you know, Biden can't claim victory and neither can Trump. And this is just a disgrace and a dangerous disgrace at that here in the United States. Absolutely. Claudia, one of the aspects of this election was, of course, Trump has also got, like, like as obvious, he's got a considerable number of votes. And this has really destroyed this argument, which a lot of liberal sections were making that the Trump victory in 2016 was some kind of aberration that, you know, that's, this is not the normal in the U.S. That was just one time a fluke sort of a thing. And what this election has demonstrated is that there are clearly very strong forces, social forces, which are, which have backed the kind of issues Trump was talking about, which has backed his policies, which has backed not only his policies, but also his ideology, so to speak, and which is brought out.  So, could you maybe also talk a bit about that aspect in terms of how these forces could be elaborated and how these forces are actually not going back? I mean, I think it's important to understand that these are the roots of the United States of America. I mean, the United States of America was founded on the backs of black enslaved people, and it has continued to be so on the back of immigrants, on the back of so many historically marginalized groups, but the native communities, the native indigenous communities here are one of the leading communities that are mostly oppressed and mostly not mentioned. They're invisibilized completely. And so I think it's important for us to understand that history. That helps us understand where we are today, because none of that has left that's always been there.  Like that's just that's structural. That doesn't change. But here in the United States, there's a sense of, you know, these are the lesser evil.  Like these are all the things that Trump in his four years and his campaign have kind of like opened up. It's been like a Pandora's box. It's been laying on the ground and, you know, it hasn't been tackled. And he had the opportunity to bring it out in the public sphere. And now, you know, folks who feel that way, folks who understand the United States in that way are coming out. And again, it's part of the culture is part of the history. It's something that at some point was deemed politically incorrect. And it's no, it's no longer, right? You have the validation from the White House that it's OK. And not only that, you have the state in the character of the police also validating some of that. And actually in many states also in strengthening it. And so it's something that it's not going to easily go away because it's part of the very heart is like part of the very roots of the United States is just being seen blatantly now. And whether the Democratic Party or, you know, anyone wants to reel that back, we need to start talking about material conditions, because a lot of the folks that have been culturally grasped by the ideology and the narrative of Trump, who are folks who suffer poverty, will not see their material conditions change. And so there is a shift in our narrative, a shift in our message that needs to happen. Definitely much more organizing, that is cross sexual, that is, you know, multiracial, that takes into consideration into consideration the different histories and our common history. And so there's a there's a long path ahead for us for some. Right, I actually wanted to ask you a bit more about that aspect because one of the things about your article was also you were talking about the kind of mobilizations that took place around the Bernie campaign, definitely. But more importantly, as well after George Floyd was murdered the mass protests that took over the streets of the United States demanding justice. And these were also accompanied by mobilizations around the issue of rent, around evictions, around health care. So there was this vast coalition of mobilizations of organizations that were building up. And I think in one of your earlier conversations with us, you had mentioned that, unlike in earlier times, these will not just be subsumed by the election campaign, and they're definitely going to continue. So from what we see on the ground from these movements, what do what do what looks like the path ahead? I mean, folks continue to raise the issue of unemployment. They continue to raise the issue of mass evictions that will happen in cold weathers for many states. You know, folks are still raising the issues of health care. I mean, these are all things that whether Democrats or Republicans when we won't see any changes to. I mean, in fact, when Biden was confronted in the last debate around health care and socializing it, he made sure to say, I believe in private health care, you know? So I think it's important for us to to understand as citizens in the United States, but also internationally, that these are two sides of the same coin and the people will continue to do what we have done, which is struggle, which is uplift demands that are basic human rights demand. And I think one very important demand that is at this particular moment becoming national and that we need to be paying attention to is the issue of voter suppression. People are noticing, you know, why is there a electoral college that chooses the president when this country is so vast and large? Why are they are so so keyed into just several states? You know, why are why are they why are they ready for the millions and millions of people to vote if we have millions of people who are of age to vote, right? So there's so many things that are coming into question, but but are again, our task and our path ahead is precisely to continue to advance the struggle of the workers of the poor, the dispossessed, because we know that neither party's interest is it's it's on behalf or is representative of the majority of the people in the United States. We need to be able to start articulating and coordinating our efforts better. And we need to start thinking about a third party option, you know, that's something that's also come to the to the table. Like there are folks that are talking about the need of being able to put forth a party that is from the movements, that is for the people and that is, you know, able to articulate and to build the power necessary to be able to have political and economic power in this country. Absolutely. And Claudia, finally, one last point, of course, regarding socialism itself, which is again, we've discussed this before, it's always for long been quite a bad word as far as the US is concerned, but over the past couple of years, you've seen a huge revitalization of interest. The Bernie campaign, of course, contributed, but it's definitely not only that, it's also a lot of grassroots movements who have really pushed what do you call the ideology there talk to people have been conducting a lot of campaigns. So also, how do you see socialism and concepts associated with socialism also sort of coming into play in US society? I mean, as you mentioned, it's been something that's been under development in the last two or three years. Most of the folks that have been looking into socialism are young people, you know, a lot of the folks that backed the Bernie campaign precisely because at some point early on in his in his campaigning career, as for the presidency, he mentioned the word socialism. He assumed himself as such, even though that's debatable. But there are young people who have developed politically, looking into what socialism could be in the United States and what socialism has been outside of the United States. And so that's very hopeful. And I think, you know, a lot of the rhetoric and a lot of the work for grassroots organizing has also helped because even if folks don't claim to be socialists, they are objectively doing work that is related to socialism, which is basically to respond to the basic needs of the people. And so there is a there's a huge an increasing number of people who are very interested in learning more about socialism. I mean, from the people's form, we do a lot of political formation and we do it with the orientation that is mostly to build organization and to have folks understand the theory behind socialism. You know, and there there are just huge numbers of people that are looking to learn more. And that's very hopeful. You know, organizations that are connected to the popular education projects in the United States are also looking to understand more. And that's, again, a very hopeful sign. But we can't stay in the hopeful moment. We can't stay in the hopeful stage. Like we need to be able to move that forward. And and that's why organization is so key. And that's why coordination is so key. And I think that that's where we are as movements in the United States looking to figure out a way of touching each other, speaking to each other, coordinating with each other, dreaming radically with each other about what a future would look like in the United States. That is not the dominance, the hegemony of capitalism. Thank you so much, Claudia, for speaking to us. Providing me. That's all we have time for today. We'll be keep we'll keep covering the US elections in the following days as well, especially its ramifications on international politics, on regime change operations across the world, which are definitely said to continue and also inside the country as well, the signs of hope that are emerging. Keep watching NewsClick and People's Dispatch.


Dear brothers, dear sisters, we are approaching Ramadan and Ramadan is the month of blessings and the month of goodness and the month of the mercy of Allah subhanahu wa ta'ala. In Ramadan we fast, many of us also pay the zakah in Ramadan and they do many acts of goodness. Today's khutbah is on a reminder that will help us achieve those goals which are Allah's. It's a reminder to learn, it's a reminder about knowledge, about knowledge in Islam. If you want to fast properly, we need to learn how to fast properly and teach our children, teach ourselves, remind ourselves of those rules and the benefit of fasting. Remind ourselves of zakah and the benefit of zakah and how to calculate zakah. But also knowledge in general. As you know in Islam knowledge has a specific place, has a special place. It is one of the shaa'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a this Ummah, it is one of the trademark of Islam and the Prophet ﷺ was sent as a teacher, one of his qualifications that he's a teacher and he said it himself, he said, «I was sent by the teacher». Allah ﷻ describe them in the Qur'an by telling us that it is He ﷻ, Allah ﷻ that sent to us from amongst ourselves a messenger that will recite to us his signs, will recite to us the scriptures, will deliver the scriptures as is. Will recite the words of Allah ﷻ as is, without addition, without subtraction. When we learn, we try to learn knowledge as is, without addition, without subtraction. When we quote people, we quote them accurately as is, without addition, without subtraction. We don't put words in their mouths, we don't twist their words. We quote knowledge accurately, we learn knowledge accurately and we transmit knowledge accurately and precisely because knowledge is one of the two things that make a person a human, that make us a humans, as a humans. As you know a human being is someone who is a rational living being, is someone who has life and has intellect. Someone who can think, someone who can learn, someone who can learn and the more we learn, the more we approach our humanity, the less we learn, the less we renounce our humanity. Allah ﷻ in the Qur'an says that, that He is the One that, wallahu akhrajakum min butuni umma hatikum la ta'lamuna shay'a. He is the One that brought us from the rooms of our mothers, knowing nothing. When we are born, we know nothing. We are a clean page, we are an empty page but He gave us the tools to learn, He gave us the tools to acquire knowledge and those tools are three, wa ja'ala lakumus sama'a wa al-absara wa al-afida, the three sources of knowledge and He gave us three tools in order to achieve and learn and acquire those knowledge through these three sources and the sources of knowledge are the senses and the intellect and transmission of information and Allah ﷻ gave us ears so that we can hear information when it's transmitted and gave us eyes so we can observe things and experiment, observation and experimentation and gave us hearts and mind and brain in order to reflect and think. Allah ﷻ and the Qur'an describe those that do not use these tools, our ulema emphasize the usage of these tools, these are the windows that Allah ﷻ gave to us, these are the keys that Allah ﷻ gave to us and with those keys we can open doors, we can open doors and then go inside and go deep and deep and deep as deeper, as deep as we wish and those who do not use those tools our ulema describe them as someone who has brought ignorance upon themselves. We are born knowing nothing but if we do not use these tools ignorance is brought upon ourselves by ourselves and in the Qur'an Allah ﷻ talked about those who do not use these tools and He said, wa lakad zara'na lijahannama kaseera minal jinni wal-ins, lahum quloobun la yasqahuna biha. They have hearts and intellect but they understand nothing with them, wa lahum a'ayunan la yumsiruna biha. They have eyes but they don't use their eyes to see things, wa lahum a'zanan la yasmahuna biha. They have ears but they don't hear with these ears and if we do not use these tools because knowledge is part of our humanity, learning is part of our humanity. The more we learn the more we educate ourselves we approach ourselves being human, we become more human, we become a complete human and the less we learn and the less we use these tools we approach other kinds of creatures. Allah ﷻ says in the Qur'an, ula'ika kal an'ami bel hum adal. Those who do not use their ears, do not use their eyes, do not use their hearts and their intellect, they are like cattle, bel adal, no they are worse than cattle, i.e. who does not learn it's like someone who has renounced his humanity. In the Qur'an Allah ﷻ told the angels that, I'm putting a successor on earth, they said oh Allah are you going to put on the earth someone who will corrupt the earth and shed blood? Allah ﷻ replied to the angels in two ways, by saying and by demonstrating. By saying he told them, inni a'lamu ma la ta'lamun and by demonstration by teaching Adam ﷺ. This creature that I'm putting on earth is a special creature, is a creature that can learn, is a creature that can acquire knowledge through education. And he told the angels this creature will learn, have the capability of learning, have the capability of acquiring knowledge. And through knowledge there is no corruption, there is no shedding of blood. Knowledge is a double-edged sword, there is beneficial knowledge and there is knowledge that will, that is not beneficial. In the Qur'an the first surah that was revealed is Iqra, Bismi rabbika allazi khalaq, recited in the name of the I Lord, allazi khalaq, the one who created, the ni'ma of knowledge, the ni'ma of recitation, the ni'ma of qura'a, the ni'ma of learning, the bounty and the mercy of learning is like the bounty of creation, it's like the bounty of giving us life, ni'ma tul ulmi ka ni'ma tul khalaq. And in this surah Allah swt talked about this, and mentioned qura'a many times, and mentioned knowledge many times, and mentioned khalk many times, and also mentioned four types of knowledge. And one of them is the worst knowledge that a person can learn, a knowledge that will cause a person to tughyan, if you acquire a particular type of knowledge that will destroy humanity, that will cause corruption on earth, that will shed blood, this is the worst type of knowledge.  The priorities are messed up, completely messed up, and this will cause them to tughyan. And Allah swt gave us the ni'ma or the trust of more responsibility, at the end inna aradna al-amanata, al-as-samawati wal-arzi wal-jibali, fa'abayna an yihmilna wa ashfaqna minna wa hamalaha l-insan, inna hu kana wal-luman jahulah. Those are two qualities that will prevent people, prevent us from fulfilling the trust that Allah swt interested us with. What are those two qualities, idna hu kana wal-luman jahulah, al-zulmu wal-jahluh, injustice, oppression and ignorance. Those two qualities will prevent us from fulfilling our mission on earth, will prevent us from being Muslims. Religion of Islam is about life, how to live our life in a way that will benefit us in this world and in the next. And the opposite of zulm and jahl is ilm and adil, is knowledge and justice. Allah swt told the angels, Inni aalamu ma la ta'lamoon wa aalama adam al-asma'a kullaha. And He taught Adam all the names and He brought them in front of the angels. He said, And in their apology they mentioned that they have no knowledge of anything. Because ignorance is an apology. We have to apologize for our ignorance. The Prophet ﷺ taught us a principle that if we do something let's try to keep doing it. If we recite the Qur'an let's try to keep reciting the Qur'an. It's better that we do something a little continuously than to recite the Qur'an for one week and then stop for a year. It's better to recite one ayat every day than to recite the Surah one day and then stop for ten years. The Prophet ﷺ cana is a amila amalan asbatah. If he was to do anything he would keep doing it. Continuity is something that our shariha encourages and learning is something that doesn't start. We start learning as soon as you are born and we end learning when we die. The knowledge will benefit us even in the hereafter. In the hereafter two things will remain with us, everything will disappear. Our ulama told us marriage and knowledge. Our spouses in this world will be our spouses in the hereafter inshaAllah and paradise. And knowledge will also be with us in the hereafter. Allah swt in the Qur'an talked about a discussion and a conversation between the believers and the disbelievers and he says, wa qaalal lazeena utu l'ilma wal iman. Those who are given knowledge and face and iman, they were given knowledge when? They were given knowledge in this world and that's on the day of judgement. Those who are given knowledge in this world and iman in this world will say to the disbelievers they say, laqad labistum fi kitabillahi ila yawmi al-baas. So haza yawmi al-baas and this is the day of resurrection. And they say this to the disbelievers on the day of resurrection. After this they tell the disbelievers, my dear brothers and sisters we can talk about knowledge for a week and there are benefits and features of knowledge. I shall mention one and we close with this. One of the benefit of knowledge that it will take us from dalaad to hudah, from misguidance to guidance. Allah swt says that He sent to us a messenger from amongst ourselves. Knowledge will transform us from being misguided to being guided. And knowledge is something that will benefit us even after our death. When a person dies, the Prophet swt says, ila min salat. And one of them is ilmun yuntafa'u bihi. Maybe he learns something and taught it to others and the benefit is gone. And this benefit will continue even after he dies. Allah swt says that Allah swt says that He sent to us a messenger from amongst us, from amongst us, from amongst us, from amongst us, from amongst us, from amongst us, from amongst us, from among us, from among us, from amongst us, from amongst us. Al-Mu'minina wal-Mu'minat, al-Ahyā'i minhum wal-amwāt, innaka yāmaw lāna samī'un arīb al-mujīb al-ta'wāt, ibad allāhi, innallāhi yāmaru bil-adli wal-iḥsāni wa'ītāri zilqrbāt wa yannhā'i al-fahshāhi wal-munkari wal-bahl yā'izukum la'allakum tazafarūm wa'atim al-salaḥ.


The strength of the Minnesota National Guard is in the diversity of experiences and skill sets our soldiers and airmen bring to the table. As a collective team of unique individuals, we can tackle any problem and accomplish any mission set. This past year, our teamwork was on display as our soldiers and airmen responded time and time again to help our communities battle the COVID-19 pandemic and respond to civil unrest. That teamwork is built on a foundation of trust, dignity, and mutual respect. Our service members must feel valued and they must feel safe. Although our soldiers and airmen serve honorably and live by our core values, we must be ever vigilant to ensure extremism does not creep into our ranks. Extremist behavior we must guard against in our formation includes racism, discrimination, and extreme political and religious views. Extremist ideologies undermine the oath we all took to support and defend the Constitution of the United States against all enemies, foreign and domestic.  We all have a role in stopping extremism. Help us by reporting concerning behaviors to your chain of command.


Hello everyone, welcome. The 7 year leap. This is about what happens in a project to develop or maintain a product when the decision is made to update the kernel from what is by now a very old version, several major versions at once to what was at the time, the latest stable release of mainline. So, my name is Ed Langley, I'm from Koblon Embedded Software Consultancy, and as I say, this talk is based on an actual project that happened and when I said real world in the title, I don't just mean it really happened, I mean in the real world when you're developing a product, sometimes things don't go so well, devices just won't work. So, I've tried to convey some of the actual challenges because having a nice code is great, but when you've got a ship, then sometimes you have to make compromises to get it out. So, for this case study, what were the issues that led to finally upgrading this old kernel? How were the upper management sold on the idea? What kind of issues ran into along the way? And if anyone else here is ever tasked with estimating or implementing a similar exercise, how long did it take in this case? It might be a useful reference for you. So, if you're updating from 2.6 straight to 4.0 something, that kind of implies that the product was running a pretty old kernel by that point. So, this is not the first time that the topic of dealing with old kernels has been covered in these kind of conferences. So, I've just referenced a few here. Will's talk about coping with an old kernel, fixing up a BSP that had an old kernel in it, and just maintaining software over a long term and in that particular talk, making sure you have a ready upgrade mechanism in place, which implies you have a newer kernel to upgrade to in the field. So, the only thing I would add to the topic of older kernels, it would be to ask, where are you on the kernel age spectrum, or at least where is your project? Because people can find themselves working on a product or a project that has an old kernel in it for a long time, and it kind of ends up being that area of expertise. So, this is a scale of kernel age that people might work with. Right over there on the left, people creating the very newest version that hasn't been released yet. And then system-on-the-chip vendors might take a new-ish mainline, put it in a public repository, add their supports for their chips or platforms. And then you've got new product developments. So, if you get a Yocto BSP today, unless you do anything weird with your recipes, you're probably going to get a 4.9-ish kernel come out. And then, going right the way along here, you get to projects that have been in development for a long time or in maintenance mode, maybe still adding a new fix here and there or a feature. And that's kind of where the example in this case study sits, about number six there. And this discussion is about moving that project right the way over to more like number three, at which point it's much easier to take any fixes that are helpful for other people, feed them right in at the left, i.e. upstream. So, in this example for this project, it was a handset for specific users running Android. The user didn't know it runs Android, it just boots into a custom app specific for the purpose of that device. And to the customer's credit, they had used a hardware design that very closely followed the Beagle board XM. Anyone remembers that from several years ago now? That's based on a Texas Instruments OMAP3, which got rebranded to Da Vinci. And the only major difference was they were using the display through what Texas Instruments calls the remote frame buffer interface, which is actually just MIPI DVI. So, there are already a few problems that got solved before upgrading, just living with the older kernel. And the major one was the real-time clock alarm needed to wake up the handsets after a fixed duration, so it could do a GSM sync. And yeah, that took a series of commits back ported from three points something and a lot of fixing up because it was quite heavily integrated into the platform code for that chip. And then the project started running into issues that were not so easily solved. Well, that wasn't easily solved, but issues, a series of issues that altogether was not an easy proposition to solve. The main requirement feature was the battery life. The suspend current draw needed to be a third of what it was. And in order to get that, a lot of power management code from later kernels would have needs to be back ported. Again, that's very heavily integrated into the platform code for the chip.  At first thought I thought this sounds like just a pinmuxing issue on the card detect line. Run the function tracer, I can see the interrupt firing going off into the OMAP hardware mod framework, which if it works with an OMAP on an older kernel, there's a whole ream of platform code in there that deals with OMAPs and plugging all the on-chip peripherals together. And it's soon transpired that was, again, going to be a lot of very complex back porting to get that working in a 2.6. And then the big problem was the suspend lock-up, what became known as the suspend lock-up amongst everyone. So very briefly goes into suspend, it's coming out of suspend, gets stuck somewhere. It's very intermittent, eventually realised how to reproduce it more reliably. Even just last week, rehearsing for this, I came up with some further ideas, I could go back and try to solve it again. But as a consultant, you feel obliged to offer good advice to your clients, and at this point I said to them, I could keep spending more time investigating all these issues, but what are you going to have at the end of it? If we solve the lock-up, you're still going to have too high a current draw, and your handset battery life is too low. So the upgrade had already been raised as a suggestion before, and then kicked around and murmured about and go away again. So I suggested it. And if you ever suggest anything to management of work, typical kind of questions that come back are along the lines of, well, how long is this going to take, Ed? How much is it going to cost us? So it's very difficult to estimate an entire kernel port. So the tactic in this case is to estimate how long it's going to take to get a new kernel running to the point where you can establish while it's fixed the issues, and then we'll carry on with adding the rest of the peripheral support for your custom platform. So that's how I got the buy-in in this example. So that's the lesson. Just if you want to sell the idea, you only need to provide the estimate and the sell for what you need to get the understanding. This is a goer we can carry on. So if you are sort of thinking about the same activity, depending on the system on chip that you have, getting to the point where you have a kernel running and you can do some basic testing might not be so easy. In this case, there's a lot of platform supports for the OMAP already upstreamed into mainline by now and settled there for some years. So it's the plan. Just ignore Android for now. Build a basic crucifest the easiest way possible. Use that to boot the kernel and do some command line testing. Now, with a much newer kernel, you need a newer tool chain, but if you try and then build an old Android source tree with a newer tool chain, you get all kinds of problems just pouring out. So the technique I used for that later was a newer tool chain for the kernel, older tool chain for the Android. So it doesn't really matter.  I'll just Google what's the best way to build a kernel for a Beagleboard XM. Well, not that for mostly, but I got sidetracked by various GitHub projects for his build routes that's optimised for Beagleboard or his Beagleboard kernel on somebody's repository. In hindsight, the best thing to do is just go and get the mainline kernel and establish what's the config, many config file you need, what's the DTB you need. They're all there in the mainline tree and it's much simpler if you just use those and get going on a mainline kernel. So if you get a newer kernel, I was talking about this with someone last night, you do need newer U-boogs, right? Obviously for the DTB loading, you could get by without having to load a DTB, but why would you want to? It's much simpler, just upgrade them as a pair. The consideration I had early on was, I knew, that they would want to be able to insert an SD card and when the on-chip bootloader recognises there's an SD card there, well, unless you open the case and press the user button, it will boot from NAND if there's a valid MLO in there, if you've ever worked with TI chips. So if the MLO sees an SD card, it will boot that U-boot, so they need to be backwards and forwards compatible. So that was just a case of making sure that the newer U-boot could be loaded with the same file name to the same memory address and just made sure to establish that early on so it didn't come back to bite me later. So after a time, I got a new kernel up and running on this handset, had a debug serial cable just pouring out of the thing. That gave me a command line and I was quite impressed with how much just worked, actually, because they followed the reference design for the Beagle board. You could press the power button, it went into the PMIC, and the thing just went to sleep. I looked at the power supply and glorious, the battery, the current draw was spos on the target figure, so it was like ching. The suspend lockup looked like it had gone. The RTC alarm was still there from after I had backported it to the past, and you could insert an SD card anytime you like. Brilliant, welcome to 2018. So, as I say, went through all those issues, checked them off. The suspend lockup, I just knocked up this script that just goes to sleep for 10 seconds, wakes up 10 seconds later, left that running all night, 2,000 cycles later, and then reproduced all the methods that you can make it happen more regularly, it doesn't happen anymore, and I just run that every time I added something new to the build, just to make sure it didn't regress, or there was actually a driver that was just causing it on this platform. So, then we come to adding the peripherals back in, because at the moment it was just a device with a serial port, you need to be able to pick it up, have a display, backlight driver, and so on. So, this is where the seven-year leap idea comes into it, because it sort of feels like if you've been working on 2.6 for ages, it feels a bit like jumping into a time machine and arriving in the present, where everything's mostly the same, but there's a few tricky differences that can catch you out. So, have a good look around what's there before you just start blindly forward-porsing all your drivers. The haphazard manner. This is an example. The backlight had been done by backporsing the Pandora backlight driver to 2.6, renaming it, changing the PWM channel. So, I was sort of in the process of doing that, and after about 10 minutes I thought, isn't there a better way of doing this now than adding a whole new C-file to change one value in there.  So, that was... a lesson learned is don't rush to forward-port customisations from your old channel. Have a good look around, make sure there's not a more elegant way to do it in the much newer version that you're going to. So, on that topic, it's a really good idea to just learn how to use device tree properly if you've been working on 2.6 for three years and you actually want to have a play with a modern kernel for once, because I see a lot of people copying and pasting stuff out of similar DTSs, and it's a really good idea to understand how to go through the documentation and see exactly what attributes are available to you, not just rely on, well, this looks like the right thing, but I don't really know how to customise it properly. So, that was an example of don't blindly forward-port. This one turns out the best solution was to just forward-port the changes. So, the lesson there was take everything on a case-by-case basis. Sometimes it's easier to just take the customisations for a platform and just move them forward. So, the display, and come back to that RFBI display interface. This is where I'd said, yeah, I think we'll be adding the display and get you the next build next week. After going to turn it on in the menu config and not being able to find this, and then establishing that when my market is unbroken and it doesn't build, I was like, I'm not going to have that ready after all for the next build. So, yeah, it works through. It's basically a case of working through fixing up the RFBI driver to work again in 4.14 because I think it just fallen into disuse. Not many people use that display output on that platform. And looking through the commit history, I did see that actually all the changes are now supposed to be going on in the direct rendering manager where a lot of the own map display drivers have been copied over to a new place. And that's where I should have been working on it. But again, in the real world, the best way to do this in a timely manner was just to fix it up where the driver had been left behind as is. And it would be nice to upstream that change. But in order to do that, I will probably have to move it to the right place before it will get accepted because I say, why are you changing it over there? That's old. There's no active development going on there. And also, again, looking around the source tree to make sure you're not reinventing the wheel, I was like, well, I've got an HX83, something, something, which outputs to an ILI98, something. Oh, there's some drivers in the staging tree here, the chips that sound like that. And looking through the data sheets, yes, some of those chips do have MIPI DBI as one of their interfaces. But the way that's all of those drivers kind of intended for SBI decoders hanging off of smaller micros and the way they're all plumbed together in software is like a world away from how an OMAP goes through its display subsystem to do its graphics. So I sort of thought, okay, I don't feel like I'm reproducing anything major here. But the point is to just make sure that there aren't already some drivers hiding somewhere in the tree that you could use. So, yes, once I got it building and the driver was reporting it was happy, I was expecting something to come up on the display and there was nothing. So, yes, I went through the usual troubleshooting approach. As you can see, I was really concerned about those clocks, came back to those three times. To be fair, the second time I did find some of them weren't actually turned on. At which point, yes, it was counting down the pixels remaining to be output to zero and doing an interrupt. Eventually, I found, looking through the schematics again, which is a popular hobby for someone who can't get their driver working. I did find... Now, I should note that on a real schematic, they don't put it all on the same page. I'm sure you've seen this, right? Probably look at them every day as well. So when you've got a level shift there and it's got two voltage rails coming out of it, it's, you know, if you're busy, it's easy to assume they're just fixed power rails, right?  And you can see here some 2.6-era platform code, everyone's favourite kind of code, right? There it is, a boot time that would turn on the regulators in the PMIC. So the point is, a really good thing to do when you embark on forward-porsing a long way in terms of a kernel would be to go through all your platform code that's custom to your device and audit that and make sure it is all reproduced correctly in device tree source. Because it's like doing a code review. It's more optimal than writing the bad code and debugging it afterwards. It's better to just make sure you've turned everything on properly instead of waiting for it to not work. So then it came to putting Android back on. And, yeah, it's not quite as simple as just, yeah, take that test-router first away and put the Android images back and it just boots. To start, I hadn't done anything with the GPU yet. So I just told Android to render in software, which I expect it would be a bit slow. And then when I did put the Android images back, they didn't just boot. And you've got to unpack your RAM disk, keep adding more utilities in there, eventually putting a whole shell in there so I could just boot into the Android RAM disk, try and manually chive it into life. And slowly established, yeah, the kernel is missing various things that Android needs, obviously, in hindsight. So the first two, that was just a case of forward porting those as is from the latest kernel where they were present. They'd been taken out because Android had become more better in later releases at just working on a more vanilla kernel. Android Debug Bridge wasn't working and this is an example of, again, don't blindly forward port because I started to take the latest available version of the Android composite USB gadget driver, tried to force that into the new kernel. It turned out it wasn't going to be an easy job. And I thought, well, how does the newer releases of Android deal without this driver? And after reading up, found, well, actually, it uses the standard USB gadget config of S framework to create a composite USB device on the fly. Or when did that get added to Android? It happened to be in the release that I was using. So it was just a simple case of telling it, do that instead of using the old driver and everything was okay with a bit of system configuration. So again, take everything on a case-by-case basis and publish what the power of release resistance is. Sometimes it is easier to forward port, other times it's better to do it a much newer way. So it got to the point where the test team had an Android device that they could test with the same test cases that the old kernel was using, the app team had something they could plug into Android Studio and load their app onto and run it. And if you're wondering, if you upgrade an Android KitKat device to a 4.x kernel, it doesn't just print the kernel version there, there's like a regex in some Java somewhere, which doesn't work with that version, so I had to go and manually alter that because I'll be damned if I'm going to update the kernel on this thing and it's not going to print it in my about device screen. So the feedback from the test team initially, apart from, hooray, well done, was, it's a bit slow. And I was like, yeah, that'd be that GPU then. So it didn't quite get the break I was hoping for, like the rest. So this is a graph of age trace, which is an Android version of system trace. It basically comes out of the kernel function tracer and makes a nice chart for you. The solid bars at the bottom are the graphics taking all of the time before the next display updates to fill the frame. And on that platform, at least, that would just slow the whole system down because it would all seem to be timed off of the display update. So I'll just summarise reenabling the GPU support There is a binary library and daemon in user space and a kernel glue module. Lots of versioning compatibility and it's just a big pain. I think that's all anyone wants to know about binary only GPUs, right? In Linux. Now what makes a product a product and not just a board with a few drivers on it, it's all the stuff in between, right? So if you work at the product end of Linux on devices, you'll be familiar with system integration, which is getting it ready for a member of the general public to use who doesn't want to plug their debug serial port into the thing. So, yeah, I sort of played around with the NAND to get that more optimally set up, had some trouble with the GPIO numbering, just randomly changing every time you boot the device. And, yeah, the ADB and the GPU kind of took a few more goes around, or two more goes each, so to get them working properly in Windows for the ADB stuff. So, yeah, as I said, as a reference for anyone, whoever wants to, or whoever gets tasked with doing something similar themselves, it might be useful to have some figures about how long this example took as a reference. I appreciate it. It might be hard to read those numbers, but the Gant... You can see from the Gant chart there's 20 weeks shown there, and the longest bar at the top was that RFBI driver, and then the longest bits at the bottom were the GPU stuff once, and then, again, when the v-sync wasn't firing properly, the v-sync interrupt. So, I'll just leave these up for a few seconds. Now, in reality, because of the scheduling of this work, it was done on a part-time basis, so what I did was take the hours and re-plot them on that chart as if they were done as eight-hour workdays. So, it was 20 weeks based on a 40-hour week. It was 94 days, well, about 800 hours of work in total. So, yeah, just to summarise again, the main lessons learned during this particular example. If you want to broach the subject of... Come on, guys, let's update this kernel already. It's much easier sell if you say, well, let's just establish it's going to fix what we need first and just estimate on that basis, and then they can decide from there.  Some things are easier, so just forward ports, like the GPU drivers in this case in the kernel. What to leave behind that Android composite USB gadget, the backlight driver, what to extend the new implementation of the backlight, as an example.  Now, this is a more of a personal lesson for me, because, yeah, like I said, there's some changes that I would have liked to upstream out of this. It's much easier, and I'm sure many of you know this, to do it while you're doing the work. Don't let the project gather dust and come back to think, oh, it wouldn't be great to upstream some stuff ahead of this conference. You've got to get it all out again. You actually have to do some changes to make it acceptable upstream. So that's kind of planned out for the future. And, yeah, every project has different challenges. In this case, getting a new kernel on there was actually relatively easy, because a lot of the platform support was already in the tree. Your mileage might vary depending on your system on chip. Okay, I think it's quite in time. Unexpectedly. So does anyone have any questions? Yes. It looks like I'm doing my own mic running. Come on, guys. Thank you for the nice talk. I didn't get how you handled specific, I mean kernel, Android kernel features like Ashman. I'm staying with the old Android user space. How did you handle that? Oh, well, for the Ashman, I literally just took the Ashman.C file, copied it into the new kernel tree. And I think there was maybe a few little bits, five lines of changes just to get it to work. Thankfully, that's quite a self-contained driver. So it really just worked as is across the kernel versions. So that was that one. When I rehearsed this talk, my feedback was, well, we're not really interested in Android. So just talk about generic kernel stuff. So I tried to sort of gloss over the Android stuff a bit to make time. But come and talk to me afterwards if you want to hear more about running old Android on a new kernel because I've seen a few mentions online about it, but I don't think many people are doing it. But the thing, you can update a kernel on a device. I'm sure many of you know this doesn't really impact system performance. If you update Android from KitKat to say to release is newer, your device is going to slow to a crawl. It's just not going to happen. That's why I stuck with the older KitKat Android release. All right, thank you. You anticipated all my questions. Anyone else got any questions? No? Okay, well, if you just feel shy, come on up to the front and ask me or send me an email. Get in touch. Okay, thank you very much.


Now just a quick recap of the objective of the business. Remember if I hit the plus button here, the objective of the businesses in general is revenue generation. Our objective as the accounting department or the bookkeepers are to enter the financial transactions in such a way that it is as easy as possible to create the end result from a financial perspective balance sheet income statement and related reports which will be used for whatever goal they need to be used for at the end of the period typically and that's going to be taxes and the creation of the financial statements for internal and external use for planning as well as providing them to like a bank or whatever needs to be done in order to get financing or something like that. And then our other goal is to facilitate our transactions in such a way that is as easy as possible to communicate with those financial transactions who we're doing business with the customers the vendors and the employees. The way we're going to do that is first we set up the company file as we have done we set up the foundational stuff many of which is in the cog like the lists the chart of accounts that we'll take a look at in more depth in a future presentation and then the products and services and so on. And this is the underlying foundational stuff that needs to happen so that the day to day data input is as easy as possible. The data data input will be done with these forms typically which most of them can be found in the new button invoices credit memos expense forms check forms bill forms processing the payroll. This is all the stuff that you do basically in a day to day process and then in order to facilitate our discussion with the people we do business with customers vendors employees that's when we often go into what I would call the centers on the left hand side such as the sales would be kind of like the center for our customers. So we've got our information related to the customers here's your list of customers and if I was to communicate with them I would go into here we don't have any customers yet but there it is expenses this is what I would call the purchasing cycle or the expense cycle we can go into our vendors and then of course we have the payroll so so there are those items there and so we'll talk more about navigating around there in future presentations